1.2 反射
1.2.1 學習筆記
參考資料:Java 2 核心技術(shù)卷I:基礎(chǔ)知識(第7版) 5.5 反射
(1) Class類
在程序運行期間,Java運行時系統(tǒng)始終為所有對象的維護一個被稱為運行時的類型標識。這個信息保存著每一個對象所有屬性的類足跡。虛擬機利用運行信息選擇相應的方法執(zhí)行。
獲取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); // 非常重要,否則無法調(diào)用f.get(zhanjh)方法
Object
v = f.get(zhanjh);// 返回zhanjh對象中 name成員(域)的值
System.out.println(v.toString());
}
}
/*
* 運行結(jié)果: zhan jh
*/
posted on 2008-02-26 17:09
zhan 閱讀(156)
評論(0) 編輯 收藏