通过反射机制获取类中的属性对象。 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;}Overridepublic String toString() {return "A [age" age ", name" name "]";}}public static void main(String[] args) {TestFiled testFilednew TestFiled ();//实例化内部类分方式如下A a testFiled.new A();Class c1 a.getClass();//获取类中所有的public字段Field[] flc1.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());//你好