美文网首页
loadClass和forName的区别

loadClass和forName的区别

作者: lenny611 | 来源:发表于2019-08-25 23:51 被阅读0次

    今天突然碰到这样一个问题:
    类的加载方式有几种?区别是什么?

    然后想了想,似乎还是挺模糊的,于是去复习了一下,在这里给出自己的答案。

    隐式加载: new(对就是我们经常new对象的new)

    显示加载:
    1.Class.forName();
    2.Class.loadClass();

    然后这两者的区别:
    因为类的加载过程分为加载——链接(链接又分为验证,准备,解析三个阶段)——初始化;

    所以Class.forName得到的class是已经初始化完成的。即类的加载过程已经完成了。

    而Class.loadClass得到的class是还没有链接的,即只是通过了类加载过程的加载阶段,通过ClassLoader加载classw文件字节码,将其放在运行时数据区的方法区内,在堆区创建一个Java.lang.Class对象(用来封装类在方法区内的数据结构)。

    那么又来了一个问题,Class.loadClass有什么用处呢?
    其实在springIOC中,大量使用了这种模式来加载,目的是为了提高加载的速度,而剩余的阶段则等到实际使用到类的时候才执行。

    相关文章

      网友评论

          本文标题:loadClass和forName的区别

          本文链接:https://www.haomeiwen.com/subject/ecrlectx.html