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