A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© coqns 中级黑马   /  2012-12-11 20:32  /  2779 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

入学测试时,考过这个题,自己也是找了半天才总结出来,完全通过反射来创建实例对象,调用构造方法、成员方法以及操作私有成员变量,代码如下:
  1. /**
  2. * 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,
  3. * 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
  4. * @author Administrator
  5. *
  6. */
  7. public class Test7{
  8.        
  9.         public static void main(String[] args) throws Exception{
  10.                 //通过反射来创建实例
  11.                 Constructor con=Person.class.getConstructor(String.class,Integer.class);
  12.                 //通过反射来调用构造函数初始化name、age
  13.                 Person person=(Person)con.newInstance("张三",18);
  14.                 //通过反射来调用setName方法对名称进行设置
  15.                 Method method=Person.class.getMethod("setName", String.class);
  16.                 method.invoke(person, "李四");
  17.                 //通过反射来直接对age赋值
  18.                 Field field=person.getClass().getDeclaredField("age");
  19.                 field.setAccessible(true);
  20.                 field.set(person, 20);
  21.                 //通过反射来取出name、age的值
  22.                 Field fieldName=person.getClass().getDeclaredField("name");
  23.                 Field fieldAge=person.getClass().getDeclaredField("age");
  24.                 //对于private修饰的私有成员变量得先设置才能访问
  25.                 fieldName.setAccessible(true);
  26.                 fieldAge.setAccessible(true);
  27.                 //输出姓名和年龄
  28.                 System.out.println(fieldName.get(person)+","+fieldAge.get(person));
  29.         }
  30. }

  31. //定义JavaBean
  32. class Person{
  33.         //定义属性name、age
  34.         private String name;
  35.         private Integer age;
  36.        
  37.         public Person(){
  38.                
  39.         }
  40.        
  41.         //构造函数初始化name、age
  42.         public Person(String name,Integer age){
  43.                 this.name=name;
  44.                 this.age=age;
  45.         }

  46.         public String getName() {
  47.                 return name;
  48.         }
  49.         public void setName(String name) {
  50.                 this.name = name;
  51.         }
  52.         public Integer getAge() {
  53.                 return age;
  54.         }
  55.         public void setAge(Integer age) {
  56.                 this.age = age;
  57.         }
  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马