通过反射机制获取类中的属性对象。
1.获取类中所有的public属性(包括父类):getFields();
public class TestFiled {
class A{
public int age;
private String name;
public A(){
}
public A(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "A [age=" + age + ", name=" + name + "]";
}
}
public static void main(String[] args) {
TestFiled testFiled=new TestFiled ();
//实例化内部类分方式如下
A a = testFiled.new A();
Class c1 = a.getClass();
//获取类中所有的public字段
Field[] fl=c1.getFields();
for(Field f :fl){
System.out.println(f.getName()); //age
}
}
}
2.获取类中所有的属性:getDeclaredFields();
//获取类中所有字段
Field[] f2 =c1.getDeclaredFields();
for(Field f:f2){
System.out.println(f.getName());//age name this$0
}
这类中定义的是两个属性,为什么在获取的过程中会多出一个this$0的属性呢?
this$0就是内部类所自动保留的一个指向所在外部类的引用。
3.获取类的私有字段并修改值
Field f3 = c1.getDeclaredField("name");
f3.setAccessible(true);
f3.set(a, "你好");
System.out.println(f3.get(a).toString());//你好