getField和getDeclaredField都是Class类的方法,反射成员变量时使用。(getMethod和getDeclaredMethod类似)
getField
获取一个类的 ==public成员变量,包括基类== 。
getDeclaredField
获取一个类的 ==所有成员变量,不包括基类== 。
Field.setAccessible
成员变量为private,必须进行此操作。
示例
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()); // 此处结果是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()); // 此处结果是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); // 此处结果是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;
}
}