java classLoader 理解一
来源:互联网 发布:java节假日 编辑:程序博客网 时间:2024/05/01 21:31
之前一直以为 java 中类的加载器有三种 AppClassLoader, ExtClassLoader,bootStrap,当然还有自定义的classloader,自定义的classloader委托AppClassLoader,AppClassLoader委托ExtClassLoader,ExtClassLoader委托bootStrap加载Class文件. 自然而然错误的认为他们之间是父子继承关系,最近才发现不是那么回事,
来看下图,
继承关系一目了然,java程序也证明了这点:
System.out.println(DemoConfig.class.getClassLoader());System.out.println(DemoConfig.class.getClassLoader().getParent());System.out.println(DemoConfig.class.getClassLoader().getClass().getSuperclass().getClassLoader());输出结果如下:
AppclassLoader 的父类是URLClassLoader ,但是它通过getParent()方法获得的父加载器是Extclassloader, URLClassLoader 的加载器是bootstrap.
AppclassLoader 加载 System.getProperty("java.class.path")下的class文件,Extclassloader 加载System.getProperty("java.ext.dirs")属性下的class文件,bootstrap则加载 System.getProperty("sun.boot.class.path")属性下的class文件
在来看两句程序:
System.out.println(DemoConfig.class.getClassLoader());System.out.println(DemoConfig.class.getClassLoader().getParent());System.out.println(DemoConfig.class.getClassLoader().getClass().getClassLoader());执行的结果是:
第一句好理解,
第二句与第三句的理解容易搞混, 来理解下:
一般我们自定义的类的class 文件(在clasPath目录下)加载顺序是 AppclassLoader 先交给 Extclassloader加载,因为Extclassloader只能加载System.getProperty("java.ext.dirs")目录下的class文件,无法加载clasPath下的文件,所以Extclassloader又交给了bootstrap加载,bootsstarp同样不负责加载classpath下的文件,所以兜了一圈又交给AppclassLoader 去加载.
DemoConfig.class.getClassLoader().getParent() 的意思是找到AppclassLoader的上一层加载器,自然就是Extclassloader
DemoConfig.class.getClassLoader().getClass().getClassLoader(); 的意思是AppclassLoader 这个class文件是有谁加载的,因为AppclassLoader这个类在rt.jar 包中,rt.jar包在 System.getProperty("sun.boot.class.path")路径下,自然是由bootstrap加载的
- java classLoader 理解一
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- java classLoader 理解二
- java classLoader 理解三
- 理解Java ClassLoader机制
- Java&&深入理解ClassLoader
- 理解Java ClassLoader机制
- 深入理解Java ClassLoader
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- 理解Java ClassLoader机制
- Java ClassLoader 深入理解
- 接口的定义和抽象的关系
- FileDialog的使用
- 设计模式之策略模式(Strategy)摘录
- Oracle 游标使用全解
- repo - contains uncommitted changes
- java classLoader 理解一
- QlikView任意改变图例的位置
- Java Annotations
- 语法分析
- 《计算机程序的构造与解释》(十一)
- JQuery中$.ajax()方法参数详解
- 判断单链表是否有环
- OCP 1Z0 052 124
- win7 IIS7 发布网站 出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"