我正在学习java中的ClassLoading概念。 我知道可以使用java.lang.ClassLoader类使用ClassLoader.getSystemClassLoader()方法获取System classLoader。是否有可能获得Extension类加载器? 我知道JVM加载了BootStrapClassLoader,我们无法实例化它。但是Extension类加载器呢?
先谢谢。
答案 0 :(得分:1)
你可以尝试这个sun.net.spi.nameservice.dns.DNSNameService.getClassLoader()
。 DNSNameService
是作为Extension类加载器存在的类。
另一种选择是写下这样的东西:
ClassLoader cl =new Object(){}.getClass().getEnclosingClass().getClassLoader();
ClassLoader prev = null;
while(cl!=null){
prev=cl;
cl=cl.getParent();
}
System.out.println(prev);
prev将包含对扩展类加载器的引用。
注意:你可以写
new Object(){}.getClass().getEnclosingClass().getClassLoader()
成语Thread.currentThread().getContextClassLoader()
甚至更简单YourClassName.class.getClassLoader()
虽然这些习语不完全相同,但任何一个都能完成这项工作。
有关详细信息,请参阅http://www.javacodegeeks.com/2011/03/understanding-extending-java.html。