我正在學習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。