zoukankan      html  css  js  c++  java
  • 【Java基础总结】反射

    1. 什么是反射
      Class、Method、Field、Constructor,它们是反射对象。它们是类、方法、成员变量、构造器,在内存中的形式。
      也就是万物皆对象!类是类型、方法是类型、成员变量是类型、构造器也是类型。
      可以把Class当作类的元神;Method是方法的元神;Field是成员的元神;Constructor是构造器的元神。
      得到了元神就可以来操作宿主。

    2. 获取Class类的对象
      Class表示一个类型,即描述类的类型。
      * 类名.class:Class c1 = Object.class;
      * 对象.getClass():Class c2 = obj.getClass();
      * Class.forName("类全名"):Class c3 = Class.forName("java.lang.String");

      Class的用途:
      * getName():获取类名
      * Class getSupperClass():获取父类类型,即获取父类的元神
      * Class[] getInterces():获取所有实现的接口的类型,即获取所有实现接口的元神。
      * T newInstance():创建该类的实例(通过默认构造器创建,如果该类型没有默认构造器,那么抛出异常)。

    3. 通过Class获取Constructor类对象
      * Constructor[] getConstructors():获取本类中所有public构造器
      * Constructor getConstructor(Class... parameterTypes):获取指定参数类型的公有构造器对象
      * Constructor[] getDeclaredConstructors():获取本类中所有构造器,包含所有访问级别
      * Constructor getDeclaredConstructor(Class... parameterTypes):获取指定参数类型的构造器,包含所有访问级别

      Construtor的用途:
      * T newInstance(Object... params):调用构造器

    4. 通过Class获取Method类对象
      * Method[] getMethods():获取本类和父类中所有public方法
      * Method getMethod(String name, Class... parameterTypes):获取指定名称及参数类型的公有方法,包括父类中的公有方法
      * Method[] getDeclaredMethods():获取本类所有方法,包含所有访问级别;
      * Mehtod getDeclaredMethod(String name, Class... parameterTypes):获取指定名称及参数类型的,包括所有访问级别,但不包含父类中的方法。

      Method的用途:
      * Object invoke(Object obj, Object... params):调用方法,其中obj是当前对象,parmas是参数。如果当前方法是static方法,那么在调用invoke方法时,第一个参数为null。

    5. 通过Class获取Field类对象
      * Field[] getFields():获取本类和父类中所有public成员变量
      * Field getField(String name):获取本类或父类中的指定名称的public成员变量
      * Field[] getDeclaredFields():获取本类中所有访问级别的成员变量,不包括父类中的。
      * Field getDeclaredField(String name):获取本类中指定名称的成员变量,可以是所有访问级别,不包括父类中的。

      Field的用途:
      * void set(Object obj, Object value):给出指定对象的成员变量赋值,obj为当前对象,value为值
      * Object get(Object obj):获取指定对象的成员变量值,obj为当前对象。

    反射的特例:内省

    内省用来操作javabean的属性,JavaBean是一种特殊的类,主要用来传递数据。属性是由getter和setter方法来决定的,即使没有字段,只要有getter和setter方法就是属性。

  • 相关阅读:
    ccache——/root/.ccache
    Ionic 2 | Tutorial | Let’s Create Our First Application
    Ionic 2 Tutorial
    搭建移动端框架Ionic+Genymotion开发环境
    【2020】输出矩阵
    【2015】给一个不多于三位的正整数,求出它是几位数,并分别打印出各位上的数字。
    【2021】小球走过的路程
    【2022】余料最少
    【2023】将十进制数转化为二进制数
    【2024】求X到Y之间的整数和
  • 原文地址:https://www.cnblogs.com/lhat/p/6178494.html
Copyright © 2011-2022 走看看