为什么<java_home> / jre / lib目录中的jar文件没有被bootstrap类加载器加载

时间:2016-04-17 19:20:50

标签: java classloader

据说

  

bootstrap类加载器加载位于<JAVA_HOME> / jre / lib目录中的核心Java库。

并且

  

扩展类加载器加载扩展目录<JAVA_HOME> / jre / lib / ext或java.ext.dirs系统属性指定的任何其他目录中的代码。它由sun.misc.Launcher $ ExtClassLoader类实现。

现在,如果我的主程序是

public class TestSt {

    public static void main(String[] args) {

        System.out.println(String.class.getClassLoader());
        System.out.println(Student.class.getClassLoader());
        System.out.println(TestSt.class.getClassLoader());
    }

}

输出

  


  sun.misc.Launcher$AppClassLoader@73d16e93   sun.misc.Launcher$AppClassLoader@73d16e93

哪个好。

现在如果我把Student Jar文件放在/ jre / lib / ext中输出是

  


  sun.misc.Launcher$ExtClassLoader@3d4eac69   sun.misc.Launcher$AppClassLoader@2a139a55

哪个也没关系。

但是如果我将学生jar文件放在中,我无法理解 / jre / lib目录。为什么输出为

  


  sun.misc.Launcher$AppClassLoader@73d16e93   sun.misc.Launcher$AppClassLoader@73d16e93

我在想这个案例中的Student Class应该从bootstrap类加载器加载,为什么它由应用程序类加载器加载。我想我错过了什么。请让我知道我错在哪里。

1 个答案:

答案 0 :(得分:2)

只有少数目录可以自动加载所有JAR。在诸如/jre/lib的目录中,仅加载它期望加载的JAR。任何其他JAR都需要通过类路径加载。