黑马程序员技术交流社区
标题:
用反射来实例化对象以及调用方法
[打印本页]
作者:
coqns
时间:
2012-12-11 20:32
标题:
用反射来实例化对象以及调用方法
入学测试时,考过这个题,自己也是找了半天才总结出来,完全通过反射来创建实例对象,调用构造方法、成员方法以及操作私有成员变量,代码如下:
/**
* 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,
* 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
* @author Administrator
*
*/
public class Test7{
public static void main(String[] args) throws Exception{
//通过反射来创建实例
Constructor con=Person.class.getConstructor(String.class,Integer.class);
//通过反射来调用构造函数初始化name、age
Person person=(Person)con.newInstance("张三",18);
//通过反射来调用setName方法对名称进行设置
Method method=Person.class.getMethod("setName", String.class);
method.invoke(person, "李四");
//通过反射来直接对age赋值
Field field=person.getClass().getDeclaredField("age");
field.setAccessible(true);
field.set(person, 20);
//通过反射来取出name、age的值
Field fieldName=person.getClass().getDeclaredField("name");
Field fieldAge=person.getClass().getDeclaredField("age");
//对于private修饰的私有成员变量得先设置才能访问
fieldName.setAccessible(true);
fieldAge.setAccessible(true);
//输出姓名和年龄
System.out.println(fieldName.get(person)+","+fieldAge.get(person));
}
}
//定义JavaBean
class Person{
//定义属性name、age
private String name;
private Integer age;
public Person(){
}
//构造函数初始化name、age
public Person(String name,Integer age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2