反射入门

1.反射(上帝视角)

1.获取反射对象的三种方法

1.通过对象

ClassObj  classobj = new ClassObj();
Classs clz = classobj.getClass();

2.通过字面值常量

Class classObjClasss = Classobj.class

3.通过静态方法

Class classObj = Class.forName(className)	

2.获取构造方法

 //只能获取给类中定义的所有公共(public)的构造方法
      Constructor<?>[] getConstructors()

      //可以获取到,该类中定义的所有的构造方法
      Constructor<?>[] getDeclaredConstructors()

    获取指定构造方法
    // 只能获取类定义中,单个指定的public的构造方法
    // Class... parameterTypes, 表示要获取的,那个构造方法的,参数列表,这个参数列表中的,都是对象数据类型的,字面值常量
    Constructor getConstructor(Class... parameterTypes)

    // 只能获取类定义中,单个指定的任意访问权限的构造方法
    Constructor getDeclaredConstructor(Class... parameterTypes)

    Constructor
    newInstance(Object... initargs)  Object... initargs创建对象时的初始化值
    使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

可变参数,int...代表可变参数,可以代表一个,多个,甚至没有。参数传递也一样。但是可变参数必须位于参数列表最后一个,且一个方法只能定义一个可变参数。

3.获取成员变量

 // 可以获取当前类中所定义的所有的公有成员变量,以及当前类的所有父类中所定义的公共成员变量
      Field[] getFields()

      // 可以获取 当前类 中定义的所有成员,但是该方法无法获取到父类中定义的成员变量
      Field[] getDeclaredFields()

      获取指定成员变量
      // 可以获取到指定名称的 公共 成员变量
      // a. 子类中找指定名称的成员变量
      // b. 如果子类中没有,在到父类中去找,如果父类中没有,则会层层向上递归,在其祖先类中查找,
              在此过程中,如果一旦找到了就会停止该查找过程,否则,会一直到最顶层祖先类,如果仍然没有找到,
              此时抛出异常 NoSuchFieldException
      Field getField(String name)


      // 只能获取 当前类中定义的,指定任意指定名称的的成员
      Field getDeclaredField(String name)

      通过Field读写对象的成员变量(可暴力破解)
      // 在指定对象上,获取该成员变量的值
      // Objecgt obj , 指的就是要获取值的那个对象

      Object get(Object obj)
      Field对象.get(对象)


      //可以设置指定对象的,该成员变量的值
      // Object obj 指的就是要设置成员变量值的对象
      // Object value 要设置的新值
      void set(Object obj, Object value)

      Field对象.set(Object obj, Object value)

4.获取成员方法

 // 获取当前类以及子类中的公共方法
      Method[] getMethods()

      // 当前类中,所定义的所有方法
      Method[] getDeclaredMethods()

      获取指定的成员方法

      // 获取当前类或其祖先类中定义的公共方法
      // String name 是指我们要获取的方法的方法的名称
      // Class... parameterTypes 指方法的参数列表
      // 确定一个方法 方法名+方法的参数列表 = 方法签名

      // getMethod方法如果获取指定的方呢?
         a. 首先在子类,定义中查找指定的方法
         b. 如果子类中没有,递归在其祖先类查找,如果一旦查找到,就停止查找过程,否则
            会一直向上递归,知道最上层根类,如果都没有,NoSuchMethodException
      Method getMethod(String name, Class... parameterTypes)

      // 获取当前类中定义的所有方法
      Method getDeclaredMethod(String name, Class<?>... parameterTypes)

      利用Method调用对象的方法
      Object invoke(Object obj, Object... args)

      利用Method调用对象的方法
      // obj 要调用方法的那个对象
      // Object... 方法调用是,传递的实际参数
      Object invoke(Object obj, Object... args)
      Method对象.invoke(obj, ars);
全部评论

相关推荐

Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
今天 11:23
重庆邮电大学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务