是否可以获取Extension类加载器对象?

时间:2011-08-31 09:30:57

标签: jvm classloader

我正在学习java中的ClassLoading概念。 我知道可以使用java.lang.ClassLoader类使用ClassLoader.getSystemClassLoader()方法获取System classLoader。是否有可能获得Extension类加载器? 我知道JVM加载了BootStrapClassLoader,我们无法实例化它。但是Extension类加载器呢?

先谢谢。

1 个答案:

答案 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