生命周期
- 加载
- 连接(验证、准备、解析)
- 初始化
- 使用
- 卸载
1.加载
类加载过程的第一步,主要完成下面 3 件事情:
- 通过全类名获取定义此类的二进制字节流(通过全类名读取文件字节流)
- 将字节流所代表的静态存储结构转换为方法区的运行时数据结构(将类模板放入方法区)
- 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口(在堆中生成一个Class对象,指向方法区中类的模板)
2.链接
- 验证:确保Class文件是符合JVM规范的。
- 准备:给静态变量分配内存空间和设置初始值。
- 只是设置初始值,赋值操作是在初始化阶段完成的。
- final static的基本类型和String类型在编译阶段就确定了
- 如果 static 变量是 final 的,但属于引用类型,那么赋值也会在初始化阶段完成
- 解析:将常量池内的符号引用替换为直接引用。
3.初始化
调用。给静态变量赋值。(没加static的变量叫实例变量,是随着对象的创建才在堆中开辟空间)