Java 反射
反射
反射允许对封装类的字段,方法和构造函数的所有信息进行编程访问
获取Class对象
Class.forName("全类名");适用于源代码阶段 全类名:包名+类名 这是最为常用的方式
类名.class 适用于加载阶段 一般更多的是当作参数进行传递
对象.getClass(); 适用于运行阶段 当我们已经有了这个类的对象时,才可以使用
获取构造方法
Class类中用于获取构造方法的方法
规则:
get表示获取
Declared表示私有
最后的s表示所有,复数形式
如果当前获取到的是私有的,必须要临时修改访问权限,否则无法使用
方法名 说明 Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组 Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组 Constructor getConstructor(Class<?>… parameterTypes) 返回单个公共构造方法对象 Consturctor getDeclaredConstructor(Class<?>… parameterTypes) 返回单个构造方法对象
Constructor类中用于创建对象的方法

获取成员变量
Class类中获取成员变量的方法
规则:
get表示获取
Declared表示私有
最后的s表示所有,复数形式
如果当前获取到的是私有的,必须要临时修改访问权限,否则无法使用

可以获取权限修饰符,成员变量名字,成员变量数据类型,成员变量记录的值,修改变量记录的值.代码略
获取成员方法

还可以获取方法的形参,方法抛出的异常,获取方法并运行(invoke方法)
反射的作用
获取一个类所有的信息,获取到了以后再执行其他的业务逻辑
结合配置文件,动态地创建对象并掉用方法
例:把对象里面所有的成员变量名和值保存到本地文件中(我们并不需要提前知道对象有什么属性)
例:与配置文件结合