java 反射 成员变量
一、获取
1、语法
// 获取 成员变量 // 1.只包含public class对象.getFields() // 2.包含private class对象.getDeclaredFields() // 指定成员变量 //1.public修饰 class对象.getField("字段名") //2.private修饰 class对象.getDeclaredField("字段名")
2、案例
@Test public void getValue() throws Exception{ Class<Person> personClass = Person.class; // public 修饰的成员变量 Field[] fields = personClass.getFields(); for (Field field : fields) { System.out.println(field); } System.out.println("======================================="); // 所有成员变量,包括private Field[] fields1 = personClass.getDeclaredFields(); for (Field field : fields1) { System.out.println(field); } System.out.println("---------------------------------------"); // 指定成员变量 public Field name = personClass.getField("name"); System.out.println(name); // 指定成员变量 private Field age = personClass.getDeclaredField("age"); System.out.println(age); }
二、使用(set和get )
1、语法
// 设置 成员变量对象.set(对象, "新值"); // 获取 成员变量对象.get(对象);
注意:private 成员变量
成员变量对象.setAccessible(true);
2、案例
@Test public void valueUse() throws Exception{ Class<Person> personClass = Person.class; Constructor<Person> constructor = personClass.getConstructor(String.class, Integer.class); Person person = constructor.newInstance("小米", 18); Field name = personClass.getField("name"); // 设置 name.set(person, "小智"); // 获取 Object o = name.get(person); System.out.println(o); }