文章目录
反射简单总结
- 反射(Reflect)是在运行时动态访问类与对象的技术
- 反射是JDK1.2版本后的高级特性, 隶属于java.lang.reflect
- 大多数Java框架都基于反射实现参数配置, 动态注入等特性
反射的核心类
Class类
- Class是JVM中代表"类和接口"的类
- Class对象具体包含了某个特定类的结构信息
- 通过Class对象可获取对应类的构造方法/方法/成员变量
Class核心方法
方法 | 用途 |
---|---|
Class.forName() | 静态方法, 用于获取指定Class对象 |
classObj.newinstance() | 通过默认构造方法创建新的对象 |
classObj.getConstructor() | 获得指定的public修饰构造方法Constructor对象 |
classObj.getMethod() | 获取指定的public修饰方法Method对象 |
classObj.getField() | 获取指定的public修饰成员变量Field对象 |
Constructor构造方法类
- Constructor类是对Java类中构造方法的抽象
- Constructor对象包含了具体类的某个具体构造方法的声明
- 通过Constructor对象调用带参构造方法创建对象
Constructor类核心方法
方法 | 用途 |
---|---|
classObj.getConstructor() | 获取指定public修饰的构造方法对象 |
constructorObj.newInstance() | 通过对应的构造方法创建对象 |
Method方法类
- Method对象指代某个类中方法的描述
- Method对象使用classObj.getMethod()方法获取
- 通过Method对象调用指定对象的对应方法
方法 | 用途 |
---|---|
classObj.getMethod() | 获取指定public修饰的方法对象 |
methodObj.invoke() | 调用指定对象的对应方法 |
Field成员变量类
- Field对应某个具体类中的成员变量的声明
- Field对象使用classObj.getField()方法获取
- 通过Field对象可以在运行时为某对象成员变量赋值/取值
Field类核心方法
方法 | 用途 |
---|---|
classObj.getField() | 获取指 定public修饰的成员变量对象 |
fieldObj.set() | 为某对象指定 成员变量赋值 |
fieldObj.get() | 获取某对象指定成员变量数值 |
getDeclared系列方法
- getDeclaredConstructor(s) | Method(s) | Field(s) 获取对应对象(所有)
- getConstructor(s) | Method(s) | Field(s) 只能获取public对象
- 访问非作用域内构造方法, 方法, 成员变量, 会抛出异常