类加载器的委托机制:
参照:张孝祥老师--类加载器以及委托机制深入分析
package com.interview.classLoader;
public class ClassLoaderTest {
public static void main(String[] args) {
/**
* 查看ClassLoaderTest的类加载器
* 通过循环输出,不做任何处理,打印可以看出结构:
* AppClassLoder-->ExtClassLoader-->null(BootStrap)
* 而如果将ClassLoaderTest.java这个类打包(export)成jar,放在ext文件夹中
* 将打印出ExtClassLoader-->null(BookStrap)
* 原因如下:
* 这就是加载器的委托机制:
* 当前线程会委托给上级加载器...,当最上级BootStrap找不到时。
* 轮到它的子类...,最后如果到当前线程还没找到,会报
* ClassNotFoundException异常,而 不会再往下找。
*/
ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
while(classLoader!=null){
System.out.println(classLoader.getClass().getName());
classLoader = classLoader.getParent();
}
System.out.println(classLoader);
//而System类的类加载器为null,System在包rt.rar中,有BootStrap加载
System.out.println(System.class.getClassLoader());
}
}
打包过程:
Brower选择的路径,如下图分析:
然后Finish即可。
类加载器分析: