万冕
反射是能够操作任意的成员的一种强大的类 ,不同于我们之前学的getter,setter方法和创建类的对象来调用成员方法,反射能更加方便.
反射直接创建需要获取的类的字节码对象,有了字节码对象,就能获取到成员与有参无参构造.
class类中: {
获取构造(Constructor):
字节码对象.newInstance与 getConstructor返回的对象.newInstance一样可以获取无参构造,但是字节码对象.newInstance只能获取无参构造
有参构造的括号里传入的是数据类型.class形式传入
获取成员变量(Field):
用field获取私有成员变量时,需要注意要把避开检测开启 field对象.setAccessible;
获取成员方法(getmethod)
需要方法对象.invoke才能执行成员方法,invoke括号里第一个传入的是调用的方法所在的类的对象,第二个如果有参则传入需要赋值的参数,无参则不用填写
调用私有成员方法时,和调用私有成员变量相同
调用有参的方法括号里第一个传入的是方法名,第二个也是传入数据类型.class形式.
如果方法有返回值,则要创建object对象来接收,在输出object对象;
}
Field类:
大致上与getter,setter
通过Field对象.get 可以获得传入的对象中当前字段的值
通过Field对象.set 可以设置传入的对象中当前字段的值
BeanUtils类
主要是拿来封装数据
三个重要的方法
static void setProperty(Object bean, String name, Object value) 给bean对象的成员变量赋值
static String getProperty(Object bean, String name) 获取bean对象的成员变量的值
static void populate(Object bean, Map properties) 利用map集合key(要赋值的成员变量名字)所对应的value(需要赋值的参数)给成员变量赋值
|