类加载器委托机制

本文深入探讨了Java类加载器的工作原理,包括BootStrap、ExtClassLoader和AppClassLoader的角色及它们之间的委托机制。通过示例代码展示了类加载过程及其层级结构。

public class ClassLoadTest {
 /* 知识储备 */
 /*
  * 类加载器 类加载器是在类未开始时进行CLASS的加载
  * 其中包括BootStrap(核心,由C++编写的2进制编码,是开启类加载器的类)JRE/lib/rt.jar
  * ExtClassLoader,AppClassLoader其中Ext为App的父类 Ext主要是加载jre下的jar文件
  * 其中App加载Classpath下的类
  * Ext加载JRE/LIB/EXT/*.JAR
  * BootStrap 加载 JRE/LIB/rt.jar
  */
 /*
  * 类加载器的原理,还有类加载器的树形结构
  *
  * 委托加载机制,调用子类时找父加载器app子层要找但是不找而是先找父类加载器, 没有父类,开始找自己有么,没有加载成功将下放在下级
  */

 // 模板方法设计模式,总体流程在父类中规定好,在细节上留一个抽象方法
 // ClassLoader classLoader = new ClassLoader()

 /*
  * 一下为类加载器的测试方法 1.测试类加载器名称
  */
 public static void main(String[] args) {
  // 输出ClassLoadTest类的类加载器名称
//  System.out.println(ClassLoadTest.class.getClassLoader().getClass()
//    .getName());
  //获取系统类的类加载器
//  System.out.println(System.class.getClassLoader());
  
  /* 将此类打包成JAR包放入到jre/ext的目录下,此类在运行时就将在EXT目录先进行加载,app加载器将不
   * 再加载此类。
   * 得到结论(委托机制,统一管理):
   * 从最低层发出请求,推到最顶层(开始找,没有找到就向下级找)
   * BootStrap -->  Ext  -->  App  (父-->子)
   * 请求流向(但并没有开始找)   App --> Ext --> Boot (开始查找,找到后进行加载没有继续向下) --> Ext -- App
   * */
  ClassLoader classLoader = ClassLoadTest.class.getClassLoader();
  
  while(classLoader != null){
   System.out.println(classLoader.getClass().getName());
   classLoader = classLoader.getParent();
  }
  System.out.println(classLoader);
  System.out.println(new ForClassLoad());
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值