据我所知,在Java环境中加载任何类之前,应该运行一个类。这就是为什么我们的主要是静态的。但是,任何人都可以告诉什么机制可以使这个第一堂课运行。?
因为它是类加载的起源,我从来不理解这种现象。
感谢您的反馈。
答案 0 :(得分:3)
它将创建第一个无法由类加载器加载的类(因为类扩展了Object(包括ClassLoader.class),而Object.class需要加载类加载器......)。引导类加载器是用本机代码编写的。这就是为什么它不需要实例化classLoader。
这是第一个类的创建方式。其中,班级" ClassLoader"然后它将能够实例化其他人。
顺便说一下,如果你在一个由引导类加载器(即System.class)加载的类上调用getClassLoader()
,你将获得null
。
答案 1 :(得分:0)
在JVM中,每个类都由 java.lang.ClassLoader 的某个实例加载。 ClassLoader类位于java.lang包中,开发人员可以自由地将其子类化,以便为类加载添加自己的功能。
在Java运行时,每个类也都有自己的代码 以第一类Java对象的形式提供,这是一个 java.lang.Class的实例。每当我们编译任何Java文件时, 编译器将嵌入一个名为class的public,static,final字段 在发出的字节代码中输入java.lang.Class。由于这个领域是 public,我们可以使用点分表示法访问它,如下所示:
java.lang.Class klass = Myclass.class;
一旦一个类加载到JVM中,就是同一个类(我重复一遍,相同 无论何时启动新的JVM,都不会再次加载 输入java MyMainClass," bootstrap类加载器"负责 用于加载java.lang.Object和其他运行时等关键Java类 首先将代码写入内存。运行时类打包在 JRE \ lib \ rt.jar文件。我们找不到bootstrap类的细节 Java文档中的加载器,因为它是本机的 实现。出于同样的原因,引导程序的行为 类加载器在JVM中也会有所不同。 more about class loading class loading in short
答案 2 :(得分:-1)
负责加载所有类的JVM。由于所有语言都有规则,因此在Java public static void main(String args[])
中,方法签名用于启动程序(您的逻辑工作流)。这并不意味着JVM使用main方法加载类,然后该类加载其他类。
Docs明确说出
Java虚拟机通过使用引导类加载器(第5.3.1节)创建一个初始类来启动,该类以依赖于实现的方式指定。然后,Java虚拟机链接初始类,初始化它,并调用公共类方法void main(String [])。调用此方法会驱动所有进一步的执行。构成主方法的Java虚拟机指令的执行可能导致附加类和接口的链接(并因此创建),以及调用其他方法。
在Java虚拟机的实现中,初始类可以作为命令行参数提供。或者,该实现可以提供初始类,该类设置类加载器,该类加载器又加载应用程序。初始类的其他选择是可能的,只要它们与前一段中给出的规范一致即可。
JVM加载一个依赖于实现的初始类,然后加载加载其他类的类加载器。