loadClass和forName的区别

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

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

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文: http://blog.chinaunix.net/uid-21227800-id-65873.html ...
    agui526阅读 1,298评论 0 1
  • 类的生命周期 类加载过程包括:加载-验证-准备-解析-初始化。这个过程顺序并不是固定的,最多仅仅代表它们开始的顺序...
    jection阅读 422评论 0 1
  • 0. 前言 JVM笔记系列,以JDK1.7为基准,主要以《深入理解Java虚拟机》(第二版)和《Java虚拟机规范...
    郭寻抚阅读 615评论 0 1
  • 佳木斯的雾霾为什么那么大,怕是要被呛死在这了
    ajuvenile阅读 91评论 0 0
  • 城语·盛色 ——公元前494年,夫差大败勾践。勾践对夫差说:“我愿意给大王当牛做马,全任大王驱使。”夫差满意的点了...
    sunroot阅读 117评论 0 0