Java 哪个类装入器负责装入第一个要装入的类?

Java 哪个类装入器负责装入第一个要装入的类?,java,jvm,language-lawyer,Java,Jvm,Language Lawyer,根据,触发加载C的D的类加载器确定C的类加载器: Java虚拟机使用三个过程之一创建类 或接口C,由N表示: 如果N表示一个非数组类或一个接口,则选择其中一个 以下方法用于加载并由此创建C: 如果引导类加载器定义了D,则引导类加载器 类加载器开始加载C(§5.3.1) 如果D是由用户定义的类加载器定义的,则相同 用户定义的类加载器启动C(§5.3.2)的加载 那么,基本情况如何?我的意思是,将有第一个要加载的类,在这种情况下显然不能定义D 它在以下文件中指定: Java虚拟机通过使用引

根据,触发加载
C
D
的类加载器确定
C
的类加载器:

Java虚拟机使用三个过程之一创建类 或接口
C
,由
N
表示:

  • 如果
    N
    表示一个非数组类或一个接口,则选择其中一个 以下方法用于加载并由此创建
    C

    • 如果引导类加载器定义了
      D
      则引导类加载器 类加载器开始加载
      C
      (§5.3.1)

    • 如果
      D
      是由用户定义的类加载器定义的,
      则相同 用户定义的类加载器启动
      C
      (§5.3.2)的加载

那么,基本情况如何?我的意思是,将有第一个要加载的类,在这种情况下显然不能定义
D

它在以下文件中指定:

Java虚拟机通过使用引导类加载器(§5.3.1)或用户定义的类加载器(§5.3.2)创建初始类或接口来启动。然后,Java虚拟机链接初始类或接口,对其进行初始化,并调用公共静态方法
voidmain(String[])
。此方法的调用将驱动所有进一步的执行。执行构成主方法的Java虚拟机指令可能会导致链接(从而创建)其他类和接口,以及调用其他方法

初始类或接口是以依赖于实现的方式指定的。例如,初始类或接口可以作为命令行参数提供。或者,Java虚拟机的实现本身可以提供一个初始类,该类设置一个类加载器,该类加载器反过来加载一个应用程序。初始类或接口的其他选择是可能的,只要它们与上一段中给出的规范一致

具体规定如下:

Java虚拟机通过使用引导类加载器(§5.3.1)或用户定义的类加载器(§5.3.2)创建初始类或接口来启动。然后,Java虚拟机链接初始类或接口,对其进行初始化,并调用公共静态方法
voidmain(String[])
。此方法的调用将驱动所有进一步的执行。执行构成主方法的Java虚拟机指令可能会导致链接(从而创建)其他类和接口,以及调用其他方法

初始类或接口是以依赖于实现的方式指定的。例如,初始类或接口可以作为命令行参数提供。或者,Java虚拟机的实现本身可以提供一个初始类,该类设置一个类加载器,该类加载器反过来加载一个应用程序。初始类或接口的其他选择是可能的,只要它们与上一段中给出的规范一致


这就是规范所指的引导类loader@ernest_k我希望如此。但是,你能从规范中找出一个具体的措辞吗?你的“基本情况”是什么?您是在询问JVM中加载/创建的第一个类(大概是
java.lang.Object
)还是应用程序类(包含
main
方法的类)?@Holger-Hmm,我最初指的是无法定义
D
的任何情况。如果这两个案例属于同一种情况,我对这两个都感兴趣。嗯,这是两个完全不同的案例。当JVM自己初始化时,它必须自己初始化类
对象
字符串
、类加载器(以及更多),因为Java端类的加载依赖于它们。此外,这些类具有循环依赖关系。因此,只有在这些类以特定于实现的方式准备好之后,它才能真正遵循正式流程。另一方面,主类是在一切就绪时加载的,使用。规范称之为引导类loader@ernest_k我希望如此。但是,你能从规范中找出一个具体的措辞吗?你的“基本情况”是什么?您是在询问JVM中加载/创建的第一个类(大概是
java.lang.Object
)还是应用程序类(包含
main
方法的类)?@Holger-Hmm,我最初指的是无法定义
D
的任何情况。如果这两个案例属于同一种情况,我对这两个都感兴趣。嗯,这是两个完全不同的案例。当JVM自己初始化时,它必须自己初始化类
对象
字符串
、类加载器(以及更多),因为Java端类的加载依赖于它们。此外,这些类具有循环依赖关系。因此,只有在这些类以特定于实现的方式准备好之后,它才能真正遵循正式流程。另一方面,当一切就绪时,使用。