我正在阅读Horstmann撰写的关于核心Java卷10中的断言的章节,它说:
某些类不是由类加载器加载,而是由类加载器直接加载 虚拟机。您可以使用这些开关有选择地启用或 禁用那些类中的断言。
我对此感到困惑,哪些类将由JVM而不是类加载器加载,我认为引导类加载器加载了初始类?
感谢。
答案 0 :(得分:0)
根据Oracle doc,没有类加载器的系统类指的是位于rt.jar中并由bootstrap类加载器加载的所有类。因此,您不能访问所提到的系统类的ClassLoader对象。
引导类加载器加载系统类(通常来自JAR文件rt.jar)。它是虚拟机的组成部分,通常用C实现。没有与引导类加载器对应的ClassLoader对象。例如,
String.class.getClassLoader()
返回null。
最后,我们应该使用-enablesystemassertions / -esa开关来启用系统类中的断言。
答案 1 :(得分:-1)
所有Java虚拟机都包含一个嵌入虚拟机的类加载器。这个嵌入式加载器称为原始类加载器。这有点特殊,因为虚拟机假定它可以访问受信任类的存储库,这些存储库可以由VM运行而无需验证。
因此,如果我们编写如下代码:
.container
这意味着类在运行时由classLoader加载,JVM负责执行程序。
我希望你明白了!