Java Class 加载过程概述
Java的类加载过程是指编写的Java源代码文件(.java)转换为可执行的Java字节码文件(.class)的过程。Java中,Java虚拟机的加载过程由Java加载(JVM)负责完成的类加载器。加载过程包括五个阶段:加载、验证、准备、分析和初始化。下面我将以表格的形式展示整个过程的步骤,并逐步解释每个阶段需要做什么。
类加载过程在加载阶段,类加载器会根据类的全限定名(包名+类名)找到并读取类的字节码文件,然后加载到内存中,创建相应的Class对象。
Class<?> clazz = Class.forName("com.example.MyClass");
在上述代码中,Class.forName
该方法用于加载类,并返回一个Class
对象。参数是类别的全限定名。
在验证阶段,虚拟机会验证字节码文件的正确性和安全性,以确保它符合Java虚拟机的标准。
// JVM自动完成验证过程,无需手动编写验证代码
验证过程由JVM自动完成,无需手动编写验证代码。
准备阶段在准备阶段,以虚拟机为类的静态变量分配内存空间,并设置默认初始值。在这个阶段,静态变量被称为“准备阶段的静态变量”。
public class MyClass { public static int num; // 准备阶段的静态变量 // ...}
在上述代码中,num
在准备阶段,默认值0(int类型的默认初始值)将被赋予静态变量。
在分析阶段,虚拟机将符号引用(如类、方法、字段的符号引用)分析为直接引用(直接引用内存地址)。
// JVM自动完成解析过程,无需手动编写解析代码
JVM自动完成分析过程,无需手动编写分析代码。
初始化阶段在初始阶段,虚拟机执行静态变量的赋值和静态代码块的初始化。在这个阶段,静态变量被称为“初始阶段的静态变量”。
public class MyClass { public static int num; // 准备阶段的静态变量 static { // 静态代码块的初始化阶段 num = 10; // 静态变量赋值初始化阶段 } // ...}
在上述代码中,静态代码块中的代码将在类初始化阶段执行,准备阶段的静态变量num
赋值为10。
Java加载过程由Java虚拟机加载器完成,包括五个阶段:加载、验证、准备、分析和初始化。在每个阶段,我们需要做以下事情:
- 加载阶段:使用
Class.forName
方法加载字节码文件,获取相应的字节码文件Class
对象。 - 验证阶段:验证过程由JVM自动完成,无需手动编写验证代码。
- 准备阶段:类别
