-
加载:通过类的完全限定名,查找此类的二进制字节码文件,利用字节码文件创建Class对象
-
验证:验证类是否符合JVM规范,安全行检查
-
文件格式验证、元数据验证、字节码验证。格式检查如:文件格式是否错误、语法是否错误、字节码是否合规
-
符号引用验证:Class文件在其常量池会通过字节码记录自己将要使用的其他类或者方法,检查它们是否存在
-
-
准备:为类的静态变量分配内存、设置初始值
-
static:分配空间,设置默认值。但赋值在初始化阶段完成
-
static 变量是final的基本类型:因为值已经确定,在分配空间的同时进行赋值
-
static变量是final类型的引用类型:赋值在初始化阶段完成
-
-
解析:将常量池中的间接引用转换为直接引用。不再引用行数,而是使用指针直接指向方法。
-
初始化:初始化静态变量和静态代码块
-
初始化一个类的时候,其父类尚未初始化,则优先初始化其父类
-
如果同时包含多个静态变量,则按照自上而下的顺序依次执行
-
-
使用:程序代码使用
-
卸载:程序代码退出、异常、结束等