类加载器。

本文详细介绍了Java中的类加载器,包括BootstrapClassLoader、ExtensionClassLoader和AppClassLoader,以及它们的加载路径和父子关系。此外,还讨论了类加载的双亲委托机制,该机制确保类加载的有序性和安全性。通过示例展示了如何获取BootstrapClassLoader的加载路径,并解释了自定义类加载器的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、类加载器ClassLoader

Java有三个类加载器

  1. BootstrapClassLoader由C++语言编写,主要加载%/JRE_HOME%\lib下的rt.jar等包。没有父加载器且getParent()返回null。父加载器不是继承关系,而是ClassLoader类中的一个字段,而getPartent()方法则是返回parent字段的值
    在这里插入图片描述
    在这里插入图片描述
String property = System.getProperty("sun.boot.class.path");
String[] split = property.split(";");
for (String s: split) {
    System.out.println(s);
}
/**
输出
D:\Job\jdk1.8.0_211\jre\lib\resources.jar
D:\Job\jdk1.8.0_211\jre\lib\rt.jar
D:\Job\jdk1.8.0_211\jre\lib\sunrsasign.jar
D:\Job\jdk1.8.0_211\jre\lib\jsse.jar
D:\Job\jdk1.8.0_211\jre\lib\jce.jar
D:\Job\jdk1.8.0_211\jre\lib\charsets.jar
D:\Job\jdk1.8.0_211\jre\lib\jfr.jar
D:\Job\jdk1.8.0_211\jre\classes
**/
  1. ExtentionClassLoader扩展类加载器,加载%JRE_HOME%\lib\ext目录下的jar包和class文件。父加载器为BootstrapClassLoader,在扩展类加载器的构造方法中,调用父类的构造方法传入的partent未null
    在这里插入图片描述

  2. AppClassLoader系统(应用)加载器,加载当前应用classPath的所有类(D:\Job\Workspace\Item\test\target\classes)。父加载器为ExtentionClassLoader,在创建系统加载器时,传入的parent为BootstrapClassLoader
    在这里插入图片描述

  3. 用户通过继承ClassLoader实现的自定义加载器,父加载器为AppClassLoader

  4. 双亲委托机制加载顺序。自定义加载器委托给 -> 父加载器AppClassLoader - > ExtentionClassLoader -> BootstrapClassLoader加载成功。加载失败再返回给ExtentionClassLoade -> AppClassLoader -> 自定义加载器,如果最后自定义加载器没有加载成功则报错

  5. 基础数据类型的加载器为BootstrapClassLoader,数组加载器为加载该元素类型的加载器
    在这里插入图片描述

参考内容

  1. https://blog.youkuaiyun.com/briblue/article/details/54973413
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值