反射機制:所謂的反射機制就是java語言在運行時擁有一項自觀的能力。經過這種能力能夠完全的瞭解自身的狀況爲下一步的動做作準備。 java
getDeclaredField()的一個例子 this
http://technet.microsoft.com/zh-cn/library/aa989722 代碼來源 spa
import java.lang.reflect.Field;
import java.util.Date;
public class Program {
public Program() {
}
public Program(String str, Date date, int i) {
this.str = str;
this.date = date;
this.i = i;
}
private String str = "Hello";
private Date date = new Date();
protected int i = 0;
public int getI() {
return i;
}
public String getStr() {
return str;
}
public static void main(String[] args) throws IllegalArgumentException,
IllegalAccessException {
try {
Program program = new Program();
Class progClass = program.getClass();
//經過反射機制,獲取到類Program中的str
Field strField1 = progClass.getDeclaredField("str");
//輸出private java.lang.String Program.str
System.out.println("Field found: " + strField1.toString());
//同上
Field dateField = progClass.getDeclaredField("date");
System.out.println("Field found: " + dateField.toString());
//同上
Field iField = progClass.getDeclaredField("i");
System.out.println("Field found: " + iField.toString());
//我想說的是這一點,這裏能獲取到類Program中的str並對其修改。
//Program類中沒有對str設置的setStr()方法,並且使用了private,
//這是不容許訪問的。
//可是咱們能經過反射機制,從而獲取private類型的值,並直接改。
Field strField = progClass.getDeclaredField("str");
strField.set(program, "我是Str字符串。");
//輸出:我是Str字符串。
System.out.println(program.getStr());
} catch (NoSuchFieldException ex) {
System.out.println(ex.toString());
}
}
} 字符串
輸出是: get
Field found: private java.lang.String Program.str
Field found: private java.util.Date Program.date
Field found: protected int Program.i
我是Str字符串。 io