物件屬性是變數嗎
訪問類的成員變數
使用Class物件可以獲取類定義的所有成員變數,獲取的成員變數以Field型別的物件或陣列方式返回,每個Field物件代表一個成員變數,利用Field物件提供的方法可以操作該類的成員變數。
Class類定義瞭如下方法,用於訪問類的成員變數。
● Field[] getFields()
該方法返回一個包含類成員變數物件的陣列,該陣列包含該類物件表示的類或介面的所有可訪問的公共成員變數。
● Field getField(String name)
該方法返回一個類成員變數物件,該成員變數物件必須是公共成員。name引數是一個字串,指定所需成員變數的名稱。
● Field[] getDeclaredFields()
該方法返回一個類成員變數物件陣列,該陣列包括該類的所有成員變數。這包括公共、受保護、預設(包)訪問和私有成員變數,但不包括繼承的成員變數。
● Field getDeclaredField(String name)
該方法返回一個類成員變數物件。name引數是一個字串,指定所需欄位的簡單名稱。
案例1:
建立FieldTest1測試類,應用Class類的getFields()方法獲取Person類的成員變數。
在PCoreUnit8專案新建field包,在field包下新建FieldTest1類。程式碼如下:
import java。lang。reflect。Constructor;
import java。lang。reflect。Field;
import constructor。Person;
public class FieldTest1 {
public static void main(String[] args) {
// 獲取Person類的Class物件
Class<?> personClass = (Class)Person。class;
try {
//透過class。getFields()獲取所有具有public許可權的成員變數
Field[] fields = personClass。getFields();
for (Field field : fields) {
System。out。println(“透過class。getFields()獲取所有具有public許可權的成員變數:” + field);
}
//透過class。getField(name)獲取指定名稱的成員變數
//成員變數必須是public訪問許可權
Field field1 = personClass。getField(“job”);
System。out。println(“透過class。getField(name)獲取指定名稱的成員變數” + field1);
//透過class。getDeclaredFields獲取所有的成員變數
Field[] fields1 = personClass。getDeclaredFields();
for (Field dfield : fields1) {
System。out。println(“透過class。getDeclaredFields獲取所有的成員變數:” + dfield);
}
//透過class。getDeclaredField(name)獲取指定名稱的成員變數
Field field2 = personClass。getDeclaredField(“name”);
System。out。println(“透過class。getDeclaredField(name)獲取指定名稱的成員變數” + field2);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e。printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e。printStackTrace();
}
}
}