一、反射的概念
1.反射是指程序在运行时,可以通过反射机制拿到任何一个类的内部所有信息。
2.可以获得类的所有属性信息,包括私有属性,并对其进行操作
3.可以获得对象所对应的类
4.可以拿到本类,或父类中的方法,并且对其进行操作。
二、Class对象的使用
常用方法:
getName:获得类对应的名称
getDeclaredFields:获得类中所有参数 私有的也可以获取到
getFields:只能获取共有的
getDeclaredMethod:获得类中的所有方法
getContructors:获得类中的构造方法
newInstance:实例化对象
获取class对象的3中常用方式
1.通过forName方式
//path:类对应的完整路径=包名加类名
Class demo1=Class.forName("com.tjpld.model.Book");
2.getClass方式
Book demo2=new Book();
demo2.getClass();
3.类名.Class方式
//直接通过类名.Class
Class demo3=Book.class;
Book book=demo3.newIntances();
三、Field对象—-Reflect包
用于表示类中,接口中所有属性对象的一个类
getName:获得属性的名称
getType:获得属性的类型
get(Object obj):取得obj对象中这个属性的值
set(Object obj,Object value):向obj这个对象插入一个value值
setAccessible(true):启用禁用访问权限
使用方法
1.testDemo(Class class){
Field fields[]=class.getDeclaredFields()
for(Field ff:fields){
system.out.prinft(ff.getName()+"/"+ff.getType());
}
}
2. testDemo2(Object obj){
Class class=obj.getClass();
Field fields[]=class.getDeclaredFields()
for(Field ff:fields){
ff.setAccess;
system.out.prinft(ff.getName()+"/"+ff.get(obj));//get方法并不能直接拿这个对象中的值,而是要先启用拿到值的权限
}
}
Method方法的使用
常用方法
getName:方法名称
getReturnType:方法的返回值类型
invoke(Object obj,Object..args):根据object对象调用方法
getParamterType:得到参数类型
使用方法:
showUser(Object obj){
Class cls=obj.getClass();
//方法名称
如果是多参数类型的方法 传值传入一个Class类型的数组Class[] cls={String.class,int.class}
Method method=cls.getMethod("getName",String.class参数类型----没有用null);
//调用多参数的方法 就传入一个object类型的数组
method.invoke(obj,参数----没有就new Object[0])
}