类装载的执行过程
主要分为了七个阶段
加载
通过类的全名,获取类的二进制数据流
解析类的二进制数据流存入到方法区
创建一个java.lang.Class类的实例,表示该类型,作为方法区这个类各种数据的访问入口,类的.class对象存在JVM堆中
验证
校验类是否符合JVM规范,做安全性检查
分为
文件格式检查(格式验证)
元数据验证(格式验证)
字节码验证(格式验证)
符号引用验证(安全性验证,检查符号引用(eg:#1)指向的类或者方法是否存在)
准备
为类变量分配内存并设置类变量的初始值
如果是普通静态变量,会在准备阶段分配空间(设置默认值),赋值会在初始化阶段去完成
如果是(值已经确定的)final静态基本类型变量或者字符串常量,会在准备阶段进行赋值
如果是final静态引用类型变量,也会在初始化阶段完成赋值
解析
把类中的符号引用转为直接引用
将类字节码文件中的符号引用变为直接指向需要执行方法的指针
初始化
对类的静态变量和静态代码块进行初始化操作
多个静态变量和静态代码块会按照自上而下的顺序依次初始化
如果父类没有初始化会先初始化父类
使用
执行类的程序代码(使用new创建对象或者直接使用静态成员)
卸载
程序代码执行完毕后就会进行卸载