package j2se.classloader;
/**
* <p>Project : J2SE的基础知识</p>
* <p>Tile : 验证JDK内置的ClassLoader </p>
* <p>Description : JDK 中内置的ClassLoader
* 1.bootstrap class loader
* 2.extension class loader
* 3.application class loader
* 4.other class loader
* 5.每一个被 class loader , loader 进来的 *.class 文件 , 如果
* 站在Class 的角度来看 , 它们就是一个Class 类的对象 ;
* </p>
* <p>Date : 2014-03-19</p>
* @author
* @version 1.0
*
*/
public class TestJDKClassLoaders {
/**
* @param args 类型为: String[]
* @return void
*/
public static void main(String[] args){
// 测试 使用 bootstrap class loader 进行加载
// 输出为 null
System.out.println(java.lang.String.class.getClassLoader()) ;
// 测试使用 extension class loader 进行加载
// 输出为 sun.misc.Launcher$ExtClassLoader
System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader().getClass().getName());
// 输出为 ExtClassLoader
System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader().getClass().getSimpleName());
// 测试使用 application class loader 进行加载
// 输出为 sun.misc.Launcher$AppClassLoader
System.out.println(TestJDKClassLoaders.class.getClassLoader().getClass().getName()) ;
// 输出为sun.misc.Launcher$AppClassLoader@2712ee9
System.out.println(ClassLoader.getSystemClassLoader()) ;
TestJDKClassLoaders.testClassLoaderParentRelation() ;
}
/**
* @description:通过测试 ClassLoader 类中的 .getParent() 方法 , 来获得 class loader 对象之间的关系
* 1.每一个class loader 对象 都有一个引用 , 指向了父 class loader 对象 , 我们可以通过
* getParent() 方法 拿到这个引用 ;
* 2.class loader 在加载 class 的时候 , 会先问一下它的上层 class loader 是否加载过 , 如
* 果加载了, 就不会再加载了 ;
*/
public static void testClassLoaderParentRelation(){
System.out.println("------- in testClassLoaderParent methods ------------") ;
ClassLoader cl = TestJDKClassLoaders.class.getClassLoader() ;
while(null != cl){
System.out.println(cl.getClass().getName()) ;
cl = cl.getParent() ;
}
}
}
jdk 内置classloader
最新推荐文章于 2022-05-06 21:04:22 发布