有人说
引导类加载器加载位于
<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文件放在/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
我在想,在这种情况下,学生类应该从引导类加载器加载,为什么它是由应用程序类加载器加载的。我想我漏掉了什么。请让我知道我哪里错了。
发布于 2016-04-17 11:42:24
只有少数几个目录可以自动加载所有的JAR。在诸如/jre/lib
这样的目录中,只加载它希望加载的JAR。任何其他的罐子都需要通过类路径加载。
https://stackoverflow.com/questions/36681098
复制相似问题