反射

Java的反射机制中, 类有Class对应,类的方法有Method对应,属性与Field对应。

Class

Class类表示Java对象的类型

获得Class对象

  • 每一个对象调用getClass()方法取得这个对象的Class类型
  • Class的静态方法forName(String className)
  • Class对象调用getSuperclass()方法
  • Java对象调用.class属性
  • 基本类型的.TYPE属性

获得Class的构造方法

  • Constructor getConstructor(Class[] params) 根据构造函数的参数,返回一个具体的具有public属性的构造函数
  • Constructor getConstructors() 返回所有具有public属性的构造函数数组
  • Constructor getDeclaredConstructor(Class[] params) 根据构造函数的参数,返回一个具体的构造函数(不分public和非public属性)
  • Constructor getDeclaredConstructors() 返回该类中所有的构造函数数组(不分public和非public属性)

获得类的成员方法

  • Method getMethod(String name, Class[] params) 根据方法名和参数,返回一个具体的具有public属性的方法
  • Method[] getMethods() 返回所有具有public属性的方法数组,包含从父类继承的方法
  • Method getDeclaredMethod(String name, Class[] params) 根据方法名和参数,返回一个具体的方法(不分public和非public属性)
  • Method[] getDeclaredMethods() 返回该类中的所有的方法数组(不分public和非public属性),不包含从父类继承的方法

获得类的成员变量(成员属性)

  • Field getField(String name) 根据变量名,返回一个具体的具有public属性的成员变量
  • Field[] getFields() 返回具有public属性的成员变量的数组
  • Field getDeclaredField(String name) 根据变量名,返回一个成员变量(不分public和非public属性)
  • Field[] getDelcaredField() 返回所有成员变量组成的数组(不分public和非public属性)

其它方法

  • newInstance()方法,返回无参构造方法的实例,有参需要调用Constructor的newInstance方法

Modifier

类Class、Method、Constructor、Field都有一个public方法int getModifiers()。

返回的int值调用Modifier的静态方法isXXX, 可以确定该类,方法,属性的修饰符(public,static,native)

方法调用

执行由反射获取的方法, 并且调用一个类的方法,首先需要一个该类的实例

  1. 由Class类获取到Method对象
  2. Method对象调用Object invoke(Object receiver, Object… args), 第一个参数是该方法所属的Class实例(静态方法可以为null), 第二个参数是该方法的参数

0 Comments
Leave a Reply