Java类的5个加载步骤
类加载的五个过程分为:
- 加载
- 验证
- 准备
- 解析
- 初始化
1 加载
完成三件事:
- 通过类的全限定名来获取定义此类的二进制字节流
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
- 在内存中生成一个代表这个类的
java.lang.Class
对象,作为方法区这个类的各种数据的访问入口。
2 验证
四个阶段的检验动作:
- 文件格式验证
- 元数据验证
- 字节码验证
- 符号引用验证。
3 准备
为类变量(static
)分配内存并设置类变量的初始值。
注意,实例变量并不在这个阶段分配内存。为类变量设置初始值并不是定义的值。
比如static int value = 123;
那么变量value
在准备阶段过后初始值为0
,而不是123
。值123
是在<clinit>()
方法中赋予。
4 解析
将常量池内的符号引用转为直接的引用。
5 初始化
按照static
块和static
变量在文件中的出现顺序,合并到<clinit>()
方法中。实例变量由<init>()
函数赋值。