在进入阅读源码之前,首先要来了解下ClassLoader的两个基本问题:
ClassLoader的加载等级
BootStrap ClassLoader
启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库。这个ClassLoader完全是由JVM自己控制的,别人无法访问到这个类,所以它不遵循委托机制,没有子加载器。
通过下面代码获取BootStrap ClassLoader和ExtClassLoader负责加载的文件:
public static void main(String[] args) {
String pathBoot = System.getProperty("sun.boot.class.path");
System.out.println(pathBoot.replaceAll(":", System.lineSeparator()));
System.out.println("--------------------");
String pathExt = System.getProperty("java.ext.dirs");
System.out.println(pathExt.replaceAll(":", System.lineSeparator()));
}
输出:
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/resources.jar
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/rt.jar
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/sunrsasign.jar
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/jsse.jar
/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/