Field类中用封装类的字段,可以用来查询字段的类型以及设置或读取字段的值。常用的方法有:
lField getField(String s) 只能获取类中及其父类公有的公有字段
lField getDeclaredField(String s) 获取该类中任意字段,包括私有
lsetAccessible(true) 如果是私有字段,要先将该私有字段进行取消权限检查的能力。也称暴力访问。
lset(Object obj, Object value) 将指定对象变量上此Field对象表示的字段设置为指定的新值。
lObject get(Object obj); 返回指定对象上Field表示的字段的值。:
示例:
class Student {
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
public class Test {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("weizhang.Student");
Student stu = (Student) clazz.newInstance();
Field[] fs = clazz.getFields();
for (Field f : fs) {
System.out.println(f);
}
Field fage = clazz.getDeclaredField("age");
Field fname = clazz.getDeclaredField("name");
fage.set(stu, 20);
System.out.println(fage.get(stu));
fname.setAccessible(true);
fname.set(stu, "张三");
System.out.println(fname.get(stu));
}
}