类加载过程分为加载、验证、准备、解析、初始化5个阶段。
1、加载
通过一个类的全限定名获取该类的二进制字节流,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口。
2、验证
确保加载的类信息符合JVM规范,没有安全方面的问题。
3、准备
主要是为类变量(static变量)分配内存,并且赋予初值。注意此时的设置初始值为默认值,具体赋值在初始化阶段完成。比如8种基本类型的初值,默认为0;引用类型的初值则为null;常量的初值即为代码中设置的值。
4、解析
虚拟机常量池内的符号引用替换为直接引用(地址引用)的过程。
5、初始化
初始化阶段是执行类构造器方法的过程。