Java类加载器介绍

57dc10bf4c2b4cad9652ac21a8e01bf7.gif在Java中,类加载器是一种动态加载类的机制,它负责在运行时查找、加载和链接类文件。当Java应用程序需要创建某个类的对象时,类加载器会在运行时查找该类对应的.class文件,并将其加载到Java虚拟机中。Java类加载器通常分为三层:
1. **启动类加载器(Bootstrap ClassLoader)**:这是最顶层的类加载器,它负责加载Java核心库(位于JVM的lib目录下的rt.jar包)中的类。这些类是Java平台的核心API,如java.lang、java.util等。
2. **扩展类加载器(Extension ClassLoader)**:它负责加载Java平台的扩展库,这些库通常位于JRE/lib/ext目录下或由系统属性java.ext.dirs指定的路径中。
3. **系统类加载器(System ClassLoader)**:也称为应用类加载器(Application ClassLoader),它负责加载classpath环境变量所指定路径下的类,也就是应用程序的.class文件。

 

除了这三个标准类加载器外,还可以自定义类加载器,以便在运行时动态加载类。自定义类加载器继承自ClassLoader类,并重写findClass方法,以便实现自己的类查找逻辑。
在Java中,类加载器之间的层次结构是由父子关系构成的树形结构,其中启动类加载器是最顶层的父加载器,扩展类加载器和系统类加载器都是启动类加载器的子加载器。当一个类加载器需要加载类时,它首先会委托其父加载器尝试加载,只有在父加载器无法加载的情况下,才会自己尝试加载。这种委托机制被称为“双亲委派模型”(Delegation Model)。

 

例如,如果你有一个自定义的类加载器MyClassLoader,它是系统类加载器的子类,那么当你试图通过MyClassLoader加载一个类时,它首先会询问系统类加载器能否加载该类,如果系统类加载器无法加载,它会继续询问扩展类加载器,如果扩展类加载器也无法加载,最后才是启动类加载器。如果所有的父加载器都无法加载,那么MyClassLoader会尝试自己加载这个类。
这种层次结构和委派模型有助于防止用户自定义的类覆盖Java核心类库中的类,从而保护了Java平台的安全性。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值