繁体   English   中英

JVM加载哪些类而不是类加载器?

[英]Which classes are loaded by JVM but not a classloader?

我正在阅读Horstmann撰写的有关Core Java Volume 10中的断言的章节,其中说:

某些类不是由类加载器加载的,而是直接由虚拟机加载的。 您可以使用这些开关在这些类中有选择地启用或禁用断言。

我对此感到困惑,哪些类将由JVM而不是类加载器加载,我以为引导类加载器加载了初始类?

谢谢。

根据Oracle文档,没有类加载器的系统类是指位于rt.jar中并由引导类加载器加载的所有类。 因此,您不能访问提到的系统类的ClassLoader对象。

引导类加载器会加载系统类(通常从JAR文件rt.jar)。 它是虚拟机的组成部分,通常在C中实现。没有对应于引导类加载器的ClassLoader对象。 例如,

String.class.getClassLoader()

返回null。

最后,我们应该使用-enablesystemassertions / -esa开关来启用系统类中的断言。

所有Java虚拟机都包含一个嵌入在虚拟机中的类加载器。 该嵌入式加载程序称为原始类加载程序。 之所以有些特殊,是因为虚拟机假定它可以访问可信类的存储库,该类可以由VM运行而无需验证。

因此,如果我们编写如下代码:

Class r = loadClass(String className, boolean resolveIt); 

这意味着类将在运行时由classLoader加载,并且JVM负责执行程序。

我希望你明白了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM