今天突然碰到这样一个问题:
类的加载方式有几种?区别是什么?
然后想了想,似乎还是挺模糊的,于是去复习了一下,在这里给出自己的答案。
隐式加载: new(对就是我们经常new对象的new)
显示加载:
1.Class.forName();
2.Class.loadClass();
然后这两者的区别:
因为类的加载过程分为加载——链接(链接又分为验证,准备,解析三个阶段)——初始化;
所以Class.forName得到的class是已经初始化完成的。即类的加载过程已经完成了。
而Class.loadClass得到的class是还没有链接的,即只是通过了类加载过程的加载阶段,通过ClassLoader加载classw文件字节码,将其放在运行时数据区的方法区内,在堆区创建一个Java.lang.Class对象(用来封装类在方法区内的数据结构)。
那么又来了一个问题,Class.loadClass有什么用处呢?
其实在springIOC中,大量使用了这种模式来加载,目的是为了提高加载的速度,而剩余的阶段则等到实际使用到类的时候才执行。