Java 虚拟机的启动是通过引导类加载器(Bootstrap Class Loader § 5.3.1) 创建一个初始类(Initial Class)来完成,这个类是由虚拟机的具体实现指定。紧接着, Java 虚拟机链接这个初始类,初始化并调用它的 public void main(String[])方法。之后的整个执行过程都是由对此方法的调用开始。执行 main 方法中的 Java 虚拟机指令可能会导致 Java 虚拟机链接另外的一些类或接口,也可能会调用另外的方法。
简单地说,虚拟机通过链接初始类,由此会调用其他类或接口,从而开始整个庞大Java项目的运行。
首先,Java 虚拟机检查引导类加载器是否是已加载过的标记为 N 的类或接口的初始加载器。如果是的话,这个类或接口就是 C,并且不再创建其它类型。否则, Java 虚拟机将参数 N 传递给引导类加载器的特定方法,以平台相关的方式搜索 C 的描述。典型的情况是,类或文件会被表示为树型文件系统中的某个文件,类或接口的名称就是此文件的路径名。
这段话描述了引导类加载器如何加载类或接口,可以详细看看。
首先, Java 虚拟机检查 L 是否为已经加载过的标识为 N 的类或接口的初始加载器。如果是的话,那个类或接口就是 C,不用再创建其它类了。否则 Java 虚拟机会调用 L 的 loadClass(N)①方法。 这次调用的返回值就是创建好的类或接口 C。 Java 虚拟机会记录下 L 是 C 的初始加载器(§ 5.3.4)。这节其余的部分会更详细地描述这个过程。
这段话描述了自定义类加载器如何加载类或接口。
链接
类加载器需要特别考虑到类型的安全链接问题。一种可能出现的情况是,当两个不同的类加载器初始加载标记为 N 的类或接口时,在每个加载器里 N 表示着不同的类或接口。
Java 虚拟机的启动是通过引导类加载器(Bootstrap Class Loader § 5.3.1) 创建一个初始类(Initial Class)来完成,这个类是由虚拟机的具体实现指定。紧接着, Java 虚拟机链接这个初始类,初始化并调用它的 public void main(String[])方法。之后的整个执行过程都是由对此方法的调用开始。执行 main 方法中的 Java 虚拟机指令可能会导致 Java 虚拟机链接另外的一些类或接口,也可能会调用另外的方法。
简单地说,虚拟机通过链接初始类,由此会调用其他类或接口,从而开始整个庞大Java项目的运行。
首先,Java 虚拟机检查引导类加载器是否是已加载过的标记为 N 的类或接口的初始加载器。如果是的话,这个类或接口就是 C,并且不再创建其它类型。否则, Java 虚拟机将参数 N 传递给引导类加载器的特定方法,以平台相关的方式搜索 C 的描述。典型的情况是,类或文件会被表示为树型文件系统中的某个文件,类或接口的名称就是此文件的路径名。
这段话描述了引导类加载器如何加载类或接口,可以详细看看。
首先, Java 虚拟机检查 L 是否为已经加载过的标识为 N 的类或接口的初始加载器。如果是的话,那个类或接口就是 C,不用再创建其它类了。否则 Java 虚拟机会调用 L 的 loadClass(N)①方法。 这次调用的返回值就是创建好的类或接口 C。 Java 虚拟机会记录下 L 是 C 的初始加载器(§ 5.3.4)。这节其余的部分会更详细地描述这个过程。
这段话描述了自定义类加载器如何加载类或接口。
链接
类加载器需要特别考虑到类型的安全链接问题。一种可能出现的情况是,当两个不同的类加载器初始加载标记为 N 的类或接口时,在每个加载器里 N 表示着不同的类或接口。