JVM提供了如下4个层次的类加载器:
1、引导类加载器
用于加载JAVA_HOME/jre/lib/rt.jar.
他并不继承自java.lang.ClassLoader,是用C/C++代码实现的。
2、扩展类加载器
用于加载JAVA_HOME/jre/lib/ext/*.jar
具体实现为sun.misc.Launcher$ExtClassLoader
3、应用类加载器
用于加载classpath路径下的class。(以Eclipse工程而言,一般默认为该工程的bin目录)
具体实现为sun.misc.Launcher$AppClassLoader
JavaCode
package com.bjsxt.test; |
4、自定义类加载器
一般由用户继承自ClassLoader实现自己的类加载器。
自定义类加载器默认会设置自己的父类加载器为AppClassLoader,即添加在父类委托机制的最底端
其实可以简单的理解为,这些类加载器的处理逻辑都是相同的,读取.class字节码文件生成Class类,只不过是从不同的路径读取。