反射的作用 发生在查询运行期的行为
通过外部输入获取类,将类变为容易配置的变量
1.在创建类型的对象的时候,获取的是类型的Class对象的一个镜像|复制体
2.在一个类加载到内存时就会存在这个类型唯一的Class对象(方法,属性,构造器...)
3.如果能够拿到一个类型的Class对象,就可以操作这个类
一 获取class类的方法 Class<范型> 引用
1直接获取
类名.calss 通过类名获取Class类的对象
对象.class 通过对象名获取Class类的对象
基本数据类型.class 获取基本数据类型的Class对象
基本数据包装类.class 获取包装类的Class类的对象
基本数据包装类.TYPE 通过基本数据包装类获取基本数据类型Class类的对象
2通过Class类方法获取
Class.forName(权限定名) (静态)通过包名+类名获取Class类的对象
子类class对象.getSuperclass() 通过子类获取父类的Class类的对象
二 Class类的基本方法
getInterface() 获取类或接口所实现的所有接口的数组
newInstance() 通过class对象调用空构造创建对应类的实例
getMOdifiers() 获取class对象所有的修饰符,返回int值(修饰符的整数编码之和)
getName() 获取包名+类名
getSimpleName() 获取类名
isPrimitive() 判断是否是基本数据类
isArray() 判断是否是Array类的对象
三 反射在构造器中的应用
1 Class类中的方法
getConstructor(参数类) 根据输入的参数类返回指定的public构造器对象
getConstructors() 获取所有public的构造器,返回构造器数组
getDeclaredConstructor(参数类) 根据输入的参数类返回指定的构造器对象
getDeclaredConstructors() 获取所有构造器,返回构造器数组
2 Constructor类的方法
newInstance(实参) 根据实参创建对象,实参为可变参数,可以为空
getName() 返回string格式的包名+类名
setAccessible(boolean) 更改构造器的权限,true为public,false为private
四 反射在方法中的应用
1 Class类中的方法
getMethod (方法名,参数类)
根据参数类返回指定的public方法对象(不包括继承), 参数类为可变参数
getMethods()
获取所有public的方法,返回方法数组(包括继承)
getDeclaredMethod(方法名,参数类)
根据输入的参数类返回指定的方法对象(不包括继承) 参数类为可变参数
getDeclaredMethods()
获取所有方法,返回方法数组(包括继承)
2 Method类中的方法
invoke(对象|null,实参)
成员方法根据对象和实参执行方法,实参为可变参数, 静态方法将对象设为null
setAccessible(boolean)
更改方法的修饰权限,true为public,false为private
getName()
返回string格式的方法名
五 反射在字段中的应用
1 Class类中的方法
getDeclaredField(String name)
根据变量名获取字段的Field对象
Field[] getDeclaredFields()
获取所有字段的Field对象,返回 Field数组
Field getField(String name)
根据变量名获取public字段的Field对象
Field[] getFields()
获取所有public字段的Field对象,返回 Field数组
2 Field类中的方法
set(对象|null,设置值) 根据对象和设置值修改成员字段,若是静态字段,对象设为null
get(对象|null) 获取字段值, 成员字段指定对象,静态字段指定null
setAccessible(boolean) 更改方法的修饰权限,true为public,false为private
getName() 返回string格式的字段名
其他 通过字段对象和Class对象,通过对字段名的拼接获取这个字段的公共的set|get
六 反射在数组中的应用
数组均为Array类
Array类中
newInstance(成员类,长度) 根据成员类和长度创建Array类的对象
静态方法set(数组对象,索引,设置内容)设置内容
静态方法get(数组对象,索引)获取内容