2011-08-31 86 views
0

我正在學習Java中的ClassLoading概念。我知道可以使用ClassLoader.getSystemClassLoader()方法使用java.lang.ClassLoader類來獲取System類加載器。是否有可能獲得擴展類加載器? 我知道JVM加載BootStrapClassLoader,我們不能實例化它。但是擴展類加載器呢?是否有可能獲得擴展類加載器對象?

在此先感謝。

回答

1

你可以試試這個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

相關問題