一、准备反射属性Field
Field翻译为字段,代表的就是属性/成员。
java.lang.reflect.Field:代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)或属性。
public class Student {
public int no;
private String name;
}
二、不采用反射机制,访问一个对象的属性
Student s = new Student();
s.no = 1111;
System.out.println(s.no);
三、采用反射机制,访问一个对象的属性
1、属性为public的int
Class studentClass = Class.forName("com.java.bean.Student");
Object obj = studentClass.newInstance(); // (底层调用无参数构造方法)
// 获取no属性(根据属性的名称获取Field)
Field noField = studentClass.getDeclaredField("no");
// 给obj对象的no属性赋值
noField.set(obj,222);
// 获取值
System.out.println(noField.get(obj));
2、属性为private的name
Field nameField = studentClass.getDeclaredField("name");
nameField.setAccessible(true);//私有属性必须设置访问权限
// 给name属性赋值
nameField.set(obj,"lisi");
// 获取name属性的值
System.out.println(nameField.get(obj));