Java类加载如何工作

时间:2014-07-24 16:08:59

标签: java

据我所知,在Java环境中加载任何类之前,应该运行一个类。这就是为什么我们的主要是静态的。但是,任何人都可以告诉什么机制可以使这个第一堂课运行。?

因为它是类加载的起源,我从来不理解这种现象。

感谢您的反馈。

3 个答案:

答案 0 :(得分:3)

您了解bootstrap class loader

的必要性

它将创建第一个无法由类加载器加载的类(因为类扩展了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加载一个依赖于实现的初始类,然后加载加载其他类的类加载器。