getField和getDeclaredField都是Class類的方法,反射成員變量時使用。(getMethod和getDeclaredMethod類似)
getField
獲取一個類的 ==public成員變量,包括基類== 。
getDeclaredField
獲取一個類的 ==所有成員變量,不包括基類== 。
Field.setAccessible
成員變量為private,必須進(jìn)行此操作。
示例
public class MyUtil {
public static void main(String[] args) {
testFields();
}
public static void testFields() {
try {
System.out.println("Declared fields: ");
Field[] fields = Dog.class.getDeclaredFields();
for(int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName()); // 此處結(jié)果是color, name, type, fur
}
System.out.println("Public fields: ");
fields = Dog.class.getFields();
for(int i = 0; i < fields.length; i++) {
System.out.println(fields[i].getName()); // 此處結(jié)果是color, location
}
Dog dog = new Dog();
dog.setAge(1);
Method method = dog.getClass().getMethod("getAge", null);
Object value = method.invoke(dog);
System.out.println(value); // 此處結(jié)果是1
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Dog extends Animal {
public int color;
protected int name;
private int type;
int fur;
}
class Animal {
public int location;
protected int age;
private int height;
int length;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}