反射:
在运行时,我们可以回去任意一个类的所有方法和属性
在运行时,让我们调用任意一个对象的所有方法和属性
反射前提:
获取类的对象
单词表
Construction()
看是犬壳醒
Class获取构造
newInstance()
应死等死
创建实例
serializable
C瑞来死波
序列号
Accessible
可访问
获取字节码对象的3种方法
通过Object的getClass()方法获取,但是必须有对象
Student
s=new Student();
Class
clas=s.getClass();
通过类名获取Class对象
Class
clas2=Student.class;
通过静态方法
Class clas3=Class.forName("类的包和类名");
·通过反射获取构造方法并使用
Constructor
getConstructor(Class... parameterTypes)
返回一个Constructor对象,它反映此Class对象所表示的类的指定公共构造方法。
Constructor[]
getConstructors()
返回一个包含某些Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造方法
ogetConstructors()获取所有的构造返回一个数组
ogetConstructor(Class... parameterTypes)获取类的无参构造/有产构造
oObjectClass.newInstance();//获取无参的构造
·Constuructor:
oT
newInstance(Object…initargs)
o通过反射获取成员变量
oField[] getFiels();//获取public的成员变量
oField[]getDeclaredFields();//获取所有的成员变量
oField
getField(Stirng name);根据字段名称,获取public字段对象
oField
getDeclaredField(String name);//获取public字段对象
·Field
通过对象获取成员变量的值
oObject get(Object obj)
通过成员变量对象,修改制定对象,指定的值
ovoid set(Object obj,Object value)
Exception in thread "main" java.lang.IllegalAccessException:
Class Com.itStone.Test_Field can not access a member of class
Com.itStone.Student with modifiers "private"
这个错误是使用了私有成员赋值.
ovoid setAccessible(true) //设置反射时,取消java的访问检查
o获取成员方法并使用
获取成员方法
Method
getDeclaredMethod(Stringname,Class... parameterTypes)
返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法。
Method[]
getDeclaredMethods()
返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
Method
getMethod(Stringname,Class... parameterTypes)
返回一个Method对象,它反映此Class对象所表示的类或接口的指定公共成员方法。
Method[]
getMethods()
返回一个包含某些Method对象的数组,这些对象反映此Class对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共member方法。
oMethod:
Object
invoke(object obj,Boject…age);
//obj就是执行的对象
//传参数
//返回值就是你方法的返回值
oJavaBean:用于封装数据
类使用公共数进行修饰
提供私有修饰的成员变量
为成员变量提供公共的访问方式getter和setter方法
公共构造方法(无参)
实现序列号接口(serializable)
oBeanUtils:Apache commons提供的一个组件,主要功能就是为了简化JAvaBean的封装操作
参数:javabean对象,属性名,值//给属性赋值
oStatic
void setProperty(Object bean,String name,Object value);
·参数:javabean对象,属性,返回String类型的值
oStatic
String getProperty(Object bean,String name);
o//把Map里的映射关系,赋值给bean对象的成员变量
oStatic
void populate(Object bean,Map properties)
注意:BeanUtils的setProperty和getProperty方法提出并不是直接操作成员变量,而是操作set和get方法