gpt4 book ai didi

java - 为什么引导类加载器未加载 /jre/lib 目录中的 jar 文件

转载 作者:行者123 更新时间:2023-12-02 03:42:30 26 4
gpt4 key购买 nike

据说

The bootstrap class loader loads the core Java libraries located in the <JAVA_HOME>/jre/lib directory.

The extensions class loader loads the code in the extensions directories <JAVA_HOME>/jre/lib/ext,or any other directory specified by the java.ext.dirs system property). It is implemented by the sun.misc.Launcher$ExtClassLoader class.

现在如果我的主程序是

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());
}

}

输出为

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

这很好。

现在,如果我将 Student Jar 文件放入/jre/lib/ext ,输出为

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

这也很好。

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

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

我在想这种情况下的Student类应该从引导类加载器加载,为什么它是由应用程序类加载器加载的。我想我错过了一些东西。请告诉我我哪里错了。

最佳答案

只有几个目录会自动加载所有 JAR。在 /jre/lib 等目录中,仅加载它期望加载的 JAR。任何其他 JAR 都需要通过类路径加载。

关于java - 为什么引导类加载器未加载 <JAVA_HOME>/jre/lib 目录中的 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com