import java.lang.reflect.Field;
/*
使用反射机制,操作一个对象的属性
*/
public class ReflectFieldOperate {
public static void main(String[] args) throws Exception {
Class userClass = Class.forName("com.User");
// 创建User对象obj,底层调用无参数构造方法。
Object obj = userClass.newInstance();
// 获取no属性(根据属性名称获取Field)
Field noField = userClass.getDeclaredField("no");
// 给obj对象(User对象)的no属性赋值,包含3要素:对象,属性,赋的值。
noField.set(obj, 2222);
// 读取obj对象(User对象)的no属性的值
System.out.println(noField.get(obj));
// 访问私有的属性
Field nameField = userClass.getDeclaredField("name");
// 打破封装,反射机制的却缺点。
nameField.setAccessible(true);
nameField.set(obj, "jack");
System.out.println(nameField.get(obj));
}
}
class User {
// 4个Field,采用不同的访问控制权限修饰符
public int no;
private String name;
protected int age;
boolean sex;
}