哪些类是由JVM加载的,而不是由类加载器加载的?

时间:2017-06-27 10:54:58

标签: java jvm classloader

我正在阅读Horstmann撰写的关于核心Java卷10中的断言的章节,它说:

  

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

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

感谢。

2 个答案:

答案 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负责执行程序。

我希望你明白了!