黑马程序员技术交流社区

标题: 如何用反射对成员变量赋值?如何用反射调用构造方法并对其中变量赋值? [打印本页]

作者: 亚男    时间: 2012-4-6 08:31
标题: 如何用反射对成员变量赋值?如何用反射调用构造方法并对其中变量赋值?
最好把代码也弄出来看看,方便理解
作者: 宋蕈    时间: 2012-4-6 08:58
得到各个字节码对应的实例对象(class):
        -类名.class
        -对象.getClass()
        -Class.forName("完整类名")

在得到的Class对象里 可调用相应的 getField() / getDeclaredField()   
getConstructor() 方法 ,给相应的参数 就能得到相应的成员变量和构造方法
具体的还要你去看API
作者: 李震 李震 李震    时间: 2012-4-6 11:00
  1.         public static void main(String[] args) throws Exception {
  2.    
  3.                 //通过calss获取类路径,获取空构造函数       
  4.                 Constructor<?> clazz=Class.forName("itcast.javabean.Person").getConstructor();
  5.                
  6.                 Person person=(Person) clazz.newInstance();//实例化对象
  7.                 //Person person = (Person) Class.forName("itcast.javabean.Person").newInstance();
  8.                
  9.                 Field fieldName = person.getClass().getDeclaredField("name");//获取bean里的对象名

  10.                 fieldName.setAccessible(true);//因为我的对象名定义的是私有的只能强制取出来,就是暴力反射

  11.                 fieldName.set(person, "lizhen");

  12.                 Field fieldAge = person.getClass().getDeclaredField("age");

  13.                 fieldAge.setAccessible(true);

  14.                 fieldAge.set(person, 22);

  15.                 System.out.println(fieldName.get(person));
  16.                 System.out.println(fieldAge.get(person));
  17.                 changeValue(person);
  18.                 System.out.println(person.getName() + person.getAge());

  19.         }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2