1.2 反射
1.2.1 学习笔记
参考资料:Java 2 核心技术卷I:基础知识(第7版) 5.5 反射
(1) Class类
在程序运行期间,Java运行时系统始终为所有对象的维护一个被称为运行时的类型标识。这个信息保存着每一个对象所有属性的类足迹。虚拟机利用运行信息选择相应的方法执行。
获取Class类对象的三种方法
(a)
getClass()
Employee e;
…
Class cl=e.getClass();
System.out.println(cl.getName()+“
” +e.getName());
Result:
Employee Harry
(b)
forName()
String className= “java.util.Date ”;
Class cl=Class.forName(className);
(c)
.class
Class cl1=Date.class;
Class cl2=int.class;
(2) 反射的分析能力
示例:
Employee.java:
publicclass Employee {
private String name;
privateintage;
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getSalary() {
returnage;
}
publicvoid setSalary(int salary) {
this.age = salary;
}
public Employee(String name, int salary) {
this.name = name;
this.age = salary;
}
}
Test.java
import java.lang.reflect.Field;
publicclass test {
publicstaticvoid main(String[] args) throws SecurityException,
NoSuchFieldException,
IllegalArgumentException,
IllegalAccessException
{
Employee zhanjh = new Employee("zhan jh", 1000);
Class<?>
cl = zhanjh.getClass();
Field
f = cl.getDeclaredField("name"); // 返回名称为“name”的私有或公有成员(域)
f.setAccessible(true); // 非常重要,否则无法调用f.get(zhanjh)方法
Object
v = f.get(zhanjh);// 返回zhanjh对象中 name成员(域)的值
System.out.println(v.toString());
}
}
/*
* 运行结果: zhan jh
*/
posted on 2008-02-26 17:09
zhan 阅读(151)
评论(0) 编辑 收藏