类加载器的委托机制:
类加载器的关系
当我们使用System.out.println(ClassLoader.getSystemClassLoader());来打印时,对应的
就是AppClassLoader,我们可以这样理解BootStrap是ExtClassLoader的父加载器,
ExtClassLoader又是AppClassLoader的父加载器,通过代码反应为:
public class Test {
public static void main(String[] args) throws Exception {
ClassLoader loder = Test.class.getClassLoader() ;
while(loder!=null){
System.out.println(loder.getClass().getName());
loder = loder.getParent() ;
}
}
结果:
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
null
每个类加载器加载时,默认的委托给上级 加载器,当上级加载器没有加载到类时,返回发起者类
加载器,如果还加载不到,报告:ClassNotFoundException,也就是说,java中应用程序的类
都是由BootStrap类加载器到它指定的目录去寻找,并加载,当找不到时,再交给
ExtClassLoader,然后是AppClassLoader到相应的ClassPath中寻找。