必须掌握:
怎么通过反射机制访问一个java对象的属性?
给属性复制set
获取属性的值get
反射机制虽然会增加代码量,但是会让程序变得灵活
import java.lang.reflect.Field;
public class Reflect {
public static void main(String[] args) throws Exception{
//不使用反射机制怎么获取一个类的属性
Srudentt srudentt = new Srudentt();
//给属性赋值
srudentt.no = 111;
//读取属性的值
System.out.println(srudentt.no);
//使用反射机制,怎么去访问一个对象的属性(set,get、)
Class studentClass = Class.forName("cn.itcast.day04.demo01.Kt1.test2.Srudentt");
Object obj = studentClass.newInstance();//obj就是Srudentt对象。(底层调用无参数构造方法)
//获取no属性(根据属性名称来获取Field)
Field nofield = studentClass.getDeclaredField("no");
//给obj对象(Strudentt对象)的no属性赋值
nofield.set(obj,2222222);//给obj对象的no属性赋值2222222
//获取属性的值
System.out.println(nofield.get(obj));
//可以访问私有的属性嘛?
Field nameField = studentClass.getDeclaredField("name");
//打破封装(反射机制的缺点:打破封装,可能会给不法分子留下机会、!)
//这样设置后,外部也可以访问private的属性。
nameField.setAccessible(true);
//给name属性赋值
nameField.set(obj,"jackson");
//获取name属性的值。
System.out.println(nameField.get(obj));
}
}