类的生命周期
| 阶段 | 加载,连接(验证,准备,解析),初始化, 使用,卸载 |
|---|---|
加载 1.类加载器获取字节码信息 2.加载完类后, jvm将字节码信息放在方法区(Metaspace/永久代) 3.生成InstanceKlass对象 保存各种信息 4.提供class对象 (便于利用反射) |
==============
==============
|
| 连接 |
验证: 1.cafebabe 2.元信息(父类非空) 3.指令语义 4.(符号引用,private否) 准备: 为static变量分配内存 (都是先给默认值0/null/false,初始化阶段才赋值,加上final关键字会提前赋值) 解析: 将常量池中的符号引用替换为直接引用 直接引用不在使用编号,而是使用内存中地址进行访问具体的数据。
|
初始化 clinit类初始化方法 1.静态变量的显式赋值(非final) 2.静态代码块
访问父类的静态不会初始化子类 (最少知识原则/迪米特) main |
clinit方法的执行顺序和java代码的一样
clinit就是执行静态代码部分的
|
| 总结 |
注意点:
|









