JVM类初始化过程
类加载机制
类加载机制主要有三步: 加载、连接、初始化。
加载
- 把编译好的class文件加载进内存 (1.7及之前为方法区,1.8取消方法区,用元数据区替代) 中,并在堆中创建对应的Class对象。
连接
验证
- 验证加载的类信息是否符合JVM规范,确保安全
准备
- 为静态变量分配内存并设置默认的初始值
解析
- 将类的二进制数据中的符号引用替换成直接引用
初始化
-
静态变量赋值 -> 静态代码块 -> 成员变量 -> 构造代码块 -> 构造方法
-
其中,成员变量、构造代码块和构造方法在实例化时即创建对象时才执行
使用
卸载
- 以上五个阶段(加载 连接 初始化 使用 卸载)为一个类的生命周期,在此并不做深入讨论
示例
Father.java
public class Father {
private static String staticMember;
private static A a = new A();
static {
System.out.println("执行Father的static块前 staticMember: " + staticMember);
System.out.println(