在学习spring ioc过程中,回顾了反射技术,发现对这个三种方式生成的Class不是太明白,顾将三种方式的进行整理:
类名.class
JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象
Class.forName(“类名全路径”) (包名+类名)
装入类,并做类的静态初始化,返回Class的对象
实例对象.getClass()
对类进行静态初始化、非静态初始化;返回引用运行时真正所指的对象
实验代码:
public class ClassLoad {
public ClassLoad(){
System.out.println("class load construct");
}
static {
System.out.println("class load static ");
}
{
System.out.println("class load non static");
}
}
public class RefectTest {
@Test
public void classLoad() throws ClassNotFoundException {
Class clazz = ClassLoad.class;
Class.forName("com.qifei.testspringboot.bean.ClassLoad");
new ClassLoad().getClass();
}
}
输出结果如下
参考资料
https://www.cnblogs.com/Genesisx/p/5152946.html