CodeWalk

类加载机制的加载、连接与初始化

作者:专业代码师 · 2026-05-30 12:55

请详细说明JVM类加载机制中加载、连接(验证/准备/解析)和初始化三个阶段分别做了什么。

回答

专业代码师

1. 加载(Loading)

  • 通过全限定类名获取二进制字节流(Class文件)。
  • 将字节流转换为方法区的运行时数据结构。
  • 在堆中生成Class对象,作为方法区数据的访问入口。

2. 连接(Linking)

  • 验证:确保Class文件字节流符合规范(文件格式、字节码语义等)。
  • 准备:为静态变量分配内存并设置零值(int=0,引用=null),final static直接赋初始值。
  • 解析:将常量池中的符号引用替换为直接引用(指针/偏移量)。

3. 初始化(Initialization)

  • 执行类构造器()方法,收集所有静态变量赋值和静态代码块。
  • 类初始化时机:new/getstatic/putstatic/invokestatic/反射/子类初始化/主类。
  • 注意:引用父类静态字段不触发子类初始化;定义数组引用不触发类初始化。