博为峰Java技术题 ——JavaSE 类加载器Ⅰ
博为峰Java技术题 ——JavaSE 类加载器Ⅰ
博为峰教研组 发表于1年前
博为峰Java技术题 ——JavaSE 类加载器Ⅰ
  • 发表于 1年前
  • 阅读 18
  • 收藏 1
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

[类加载器简介]

博为峰小博老师:

类加载器负责将.class文件加载到内存中,并为之生成相应的java.lang.Class对象。

当JVM启动时,会形成由三个类加载器(BootStrap、ExtClassLoader、AppClassLoader)组成的初始类加载器层次结构,如下图:

其中,BootStrap由JVM加载,ExtClassLoader和AppClassLoader由BootStrap加载。

例子:用程序去证明上图中对应的类加载器的父子关系(非继承中的父子关系)

问题:当程序中用到一个类时,使用哪个类加载器加载该类?

当前线程的类加载器( Thread.getContextClassLoader() )去加载线程中的第一个类。

如果类A中引用了类B,Java虚拟机将使用加载类A的类加载器来加载类B(全盘负责)。

还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。

注意:每个类加载器加载类时,先委托给其上级类加载器(父类委托)。

当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛ClassNotFoundException。(不去找发起者的子加载器,因为ClassLoader没有getChild方法)

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 46
博文 1224
码字总数 479077
×
博为峰教研组
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: