Java反射机制

Java反射机制

一、 获取字节码文件 (三种方法)

  • .Class
  • .getClass()
  • .Class.forName("完整的全路径")

二、 获取构造方法

1. 字节码文件通过下列方法得到构造方法对象 (四种方法)

  • getConstructor(参数个数,参数类型),获取指定的公共构造方法
  • getConstructors(),获取公共构造方法
  • getDeclaredConstructor(参数个数,参数类型),获取指定的构造方法
  • getDeclaredConstructors(),获取全部构造方法

2. 构造方法对象 通过.newInstance()创建一个实例对象

如果是通过.getDeclaredConstructor()获得的对象,是无法用私有的构造方法实例化的,所以要先.setAccessible(true),取消访问检查即可

三、 获取成员变量

1. 字节码文件 通过下列方法实例化一个成员变量

  • getField(String name 成员变量的名字),获取指定的公共成员变量对象
  • getDeclaredField(String name 成员变量的名字),获取指定的成员变量对象

可以通过.getFields()或getDeclaredFields()返回包含所有成员变量的数组的对象fields(这个数组包含有所有成员变量)

2. 给 构造方法的对象obj 的成员变量 addressField 赋值 “西安“

addressField . set(obj,”西安”)

//如果addressField是私有的,要用addressField.setAccessible(true) 取消访问检查

四、 获取成员方法

1. 字节码文件 通过下列方法可以获得成员方法

  • .getMethod(String name 方法名字 , args 参数),获取公共的方法
  • .getDeclaredMethod(String name 方法名字 , args 参数),获取方法
  • .getMethods(),返回一个数组,该数组包括所有方法以及继承的和超类中的方法
  • .getDeclaredMethods(),返回一个只包含本类的所有方法的数组

例:Method m = c.getMethod(“method1”)

2. 调用成员方法

//调用 构造方法的对象obj 的 m 成员方法(method1方法)

m . invoke(obj 实例化的对象, args 参数)

//没有参数就不用写参数,如果method1是私有的,就要m.setAccessible(true)取消访问检查

五、 反射可以越过泛型检查

例如,通过反射可以往ArrayList里添加字符串数据

六、 反射可以运行配置文件的指定内容

posted @ 2022-09-05 09:43  鸽鴿  阅读(27)  评论(0)    收藏  举报