反射概述
先说下普通情况下新建一个类的过程。
当我们为某个项目配置好jdk后,java文件在进行编译时,javac就已经将对应的Java文件编译为class文件了。
在java中创建这个类的对象时且该类是首次被加载时,jvm虚拟机就加载对应的class文件并在内存中(方法区)创建了这个类对象并拷贝这个class文件中所有的成员变量到这个class类对象。
之后在堆内存中开辟一块内存空间用于存储这个类的对象并拷贝一份属性,栈中存放的是堆中对应的类的对象的内存地址。
通过反射创建对象过程:
通过创建对象实例加载class文件到jvm上面时创建的Class对象来获取这个类中的成员变量。
简单来说就是平时我们获取这个类的信息是通过实例这个类来获取,而反射就是通过class类对象来获取信息
一下过程就是通过Student的class文件获取对象。
public class reflectlianxi {
@Test//通过反射获取成员变量
public void reflectForBianliang() throws Exception{
//我们是可以通过反射来获取或者设置类对象中的变量的
//创建一个类对象
Class cla=Student.class;
//创建用类对象创建一个实例对象(这个方法会调用无参构造)
Object obj=cla.newInstance();
//获取这个类中的某个对象
Field fie=cla.getDeclaredField("age");
//开启权限,否则无法设置私有变量
fie.setAccessible(true);
//赋值
fie.set(obj, "18");
//取值
Object value=fie.get(obj);
System.out.println(value);
}