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
(§5.3.1)C
- 如果
是由用户定义的类加载器定义的,则相同 用户定义的类加载器启动D
(§5.3.2)的加载C
- 如果引导类加载器定义了
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端类的加载依赖于它们。此外,这些类具有循环依赖关系。因此,只有在这些类以特定于实现的方式准备好之后,它才能真正遵循正式流程。另一方面,当一切就绪时,使用。