graph TD
加载 --> 验证 --> 准备 --> 解析 --> 初始化
-
加载:通过类的全限定名,查找类的二进制字节流(
.class文件),将其静态存储结构转换为方法区的运行时数据结构,并生成一个Class对象(作为方法区访问入口) -
验证:确保字节码符合JVM规范,防止恶意代码破坏JVM
-
准备:为类变量(静态变量)分配内存(并赋值,主要侧重在内存分配上)
注意:被final修饰的static字段不会赋值,因为他在编译期就分配了 -
解析:将常量池内的符号引用(字面量)替换为直接引用(内存地址偏移量、指针等)
-
初始化:执行类构造器方法(编译器自动生成),为类变量赋实际值,执行静态代码块。