反射

反射的作用   发生在查询运行期的行为  

通过外部输入获取类,将类变为容易配置的变量

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(数组对象,索引)获取内容

原文地址:https://www.cnblogs.com/javaxiaobu/p/11043430.html