2011-08-31 54 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

相关问题