正如我所知,在Java环境中加载任何类之前,应该运行一个类。所以我们的主干道是静态的。但是谁能说出哪种机制能让这个头等舱运行起来呢?
因为这是类加载的起源,而我从未理解过这种现象。
谢谢你的反馈。
发布于 2014-07-24 16:14:38
你明白引导类装入器的需要
它将创建类加载器无法加载的第一个类(因为类扩展对象(包括ClassLoader.class)和Object.class需要一个类加载器.)。引导类加载器是用本机代码编写的。这就是它不需要实例化classLoader的原因。
第一个类就是这样创建的。其中,类"ClassLoader“将能够实例化其他类。
顺便说一句,如果在由引导类加载器(即System.class)加载的类上调用null,您将得到null。
发布于 2014-07-24 16:21:08
在JVM中,每个类都由某个java.lang.ClassLoader.实例加载。ClassLoader类位于java.lang包中,开发人员可以自由地将其子类添加到类加载中。
在Java运行时中,每个类都有它的代码,其形式也是java.lang.Class的一个实例,即第一类Java对象的形式。每当我们编译任何Java文件时,编译器都会在发出的字节代码中嵌入一个java.lang.Class类型的公共、静态、最后的名为类的字段。由于这个字段是公共的,所以我们可以使用虚线表示法访问它,如下所示:
java.lang.Class klass = Myclass.class;一旦将类加载到JVM中,只要通过键入java MyMainClass启动新JVM,同一个类(重复一遍,同一个类)就不会再次加载,“引导类加载器”首先负责将java.lang.Object等关键Java类和其他运行时代码加载到内存中。运行时类打包在JRE\lib\rt.jar文件中。我们无法在Java文档中找到引导类加载器的详细信息,因为这是一个本机实现。出于同样的原因,引导类加载器的行为在JVM中也会有所不同。更多关于类加载的信息 类加载
发布于 2014-07-24 16:18:50
负责加载所有类的是JVM。由于所有语言都有规则,所以在Java中使用public static void main(String args[])方法签名来启动程序(您的逻辑工作流)。这并不意味着JVM用main方法加载类,然后加载其他类。
文档说得很清楚
Java虚拟机通过使用引导类加载程序创建一个初始类来启动(§5.3.1),该类是以依赖于实现的方式指定的。然后,链接初始类,初始化它,并调用公共类方法void (String[])。此方法的调用将驱动所有进一步的执行。执行构成主要方法的Java虚拟机指令可能会导致连接(进而创建)其他类和接口,以及调用其他方法。 在Java虚拟机的实现中,初始类可以作为命令行参数提供。或者,实现可以提供一个初始类,该类设置一个类加载器,然后再加载一个应用程序。初始类的其他选择是可能的,只要它们与上一段中给出的规范一致。
JVM加载一个与实现相关的初始类,然后加载加载其他类的类加载器。
https://stackoverflow.com/questions/24938837
复制相似问题