Java的反射(reflection)機制是指在程序的運行狀態中,可以構造任意一個類的對象,可以瞭解任意一個對象所屬的類,可以瞭解任意一個類的成員變量和方法,可以調用任意一個對象的屬性和方法。這種動態獲取程序信息以及動態調用對象的功能稱爲Java語言的反射機制。反射被視爲動態語言的關鍵。
當然,平時我們在項目中使用的機率比較小,一般是用在框架上的,從而使擴展性更強。下面我們就簡單寫一個例子,來使用下。
public class TestMode {
private int age;
String name;
int length;
public TestMode(){
}
public TestMode(int age, String name, int length) {
this.age = age;
this.name = name;
this.length = length;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "TestMode{" +
"age=" + age +
", name='" + name + '\'' +
", length=" + length +
'}';
}
}
新建了一個java類,並且給這個類負值,然後通過反射機制獲取。
TestMode testMode = new TestMode(30, "明", 170);
Class cla = testMode.getClass();
Field[] fields=cla.getDeclaredFields();
for (Field field:fields ) {
Object vl=field.getName();
try {
/**
* 設置field 訪問私有權限
* 對所有屬性設置訪問權限 當類中的成員變量爲private時 必須設置此項
*/
field.setAccessible(true);
Object obj=field.get(testMode);
System.out.println(field.getName());
System.out.println("value:"+obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
這樣我們就可以通過反射來獲取類中所有的方法 及函數值。
age
value:30
name
value:明
length
value:170
如果想更多瞭解可以參考這裏:https://www.jianshu.com/p/9be58ee20dee,這篇寫的比較全