JVM加载了哪些类,而不是ClassLoader



我正在浏览Horstmann的Core Java第10卷中的断言,它说:

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

我对此感到困惑,哪个类将由JVM加载而不是类加载程序,我认为Bootstrap classloader加载了初始类?

谢谢。

根据Oracle Doc,没有类加载程序的系统类,请参考位于RT.Jar中的所有类,并由Bootstrap类Loader加载。因此,您无法访问上述系统类的classloader对象。

Bootstrap类加载器加载系统类(通常是从Jar File RT.JAR(。它是虚拟机不可或缺的一部分,通常在C中实现。没有与Bootstrap类加载程序相对应的ClassLoader对象。例如,

string.class.getClassLoader((

返回null。

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

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

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

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

这意味着类在运行时加载classloader,而JVM负责执行程序。

我希望你得到它!

最新更新