类加载过程是Java虚拟机将Class文件中的二进制数据转换为Class对象的过程。它由类加载器触发并完成。
类加载过程主要包括以下几个步骤:
- 加载:由类加载器将.class文件加载到内存中,并为之创建一个Class对象。
- 链接:验证版本和格式是否正确,解析常量并设置值,将时间赋值给变量。
- 初始化:调用类构造器()方法,给静态变量赋初始值。
- 使用:可以创建类的实例对象并访问类中的字段和方法。
类的加载过程遵循”懒加载”原则,只有当一个类被首次主动使用时,该类才会被加载到内存中。比如创建类实例、访问静态字段或方法等。
来看一个简单例子:
public class LoadingProcessDemo {
public static void main(String[] args) {
// 自动触发该类的加载过程
Son son = new Son();
}
}
class Father {
static int A ;
static {
System.out.println("Father的静态代码块");
}
}
class Son extends Father {
static int B ;
static {
System.out.println("Son的静态代码块");
}
}
该程序执行main方法时,会自动触发Son类的加载过程:
- 加载阶段:加载Son类的二进制数据,创建Son类的Class对象。
- 链接阶段:验证Son类的版本和格式,解析常量和变量。
- 初始化阶段:执行Son的静态代码块,输出”Son的静态代码块”。由于Son继承Father,会先初始化Father类,输出”Father的静态代码块”。
- 使用阶段:创建Son的实例对象son。