文章来源:
https://blog.csdn.net/xyang81/article/details/7292380#NetWorkClassLoader
验证ClassLoader加载类的原理
测试1:打印ClassLoader类的层次结构,请看下面这段代码
// 获得加载ClassLoaderTest.class这个类的类加载器
ClassLoader loader = AppClassLoaderTest.class.getClassLoader();
while (loader != null) {
System.out.println(loader);
// 获得父类加载器的引用
loader = loader.getParent();
}
System.out.println(loader);
打印结果:
sun.misc.Launcher$AppClassLoader@73d16e93
sun.misc.Launcher$ExtClassLoader@15db9742
null
第一行结果说明:AppClassLoaderTest的类加载器是AppClassLoader。
第二行结果说明:AppClassLoader的类加器是ExtClassLoader,即parent=ExtClassLoader。
第三行结果说明:ExtClassLoader的类加器是Bootstrap ClassLoader,因为Bootstrap ClassLoader不是一个普通的Java类,所以ExtClassLoader的parent=null,所以第三行的打印结果为null就是这个原因。
测试2:将AppClassLoaderTest.class打包成ClassLoaderTest.jar,放到Extension ClassLoader的加载目录下(C:\Java\jdk1.8.0_101\jre\lib\ext),然后重新运行这个程序,得到的结果会是什么样呢?
重新运行测试一程序:
// 获得加载ClassLoaderT