类加载过程
类加载过程分为三个阶段:加载(loading)->链接(linking)->初始化(initialization)
类加载过程
加载
- 通过类的限定名找到该类的二进制字节流
- 把类的二进制字节流转化为方法区的运行时数据结构
- 生成该类的Class对象
链接
链接又分为三个子阶段:验证、准备、解析
- 验证
- 确保加载类的正确性
- 准备
- 对类的成员属性赋零值
- 对字面量属性赋初值(final)
- 解析
- 将常量池的符号引用转为直接引用(前期绑定)
初始化
为类的成员变量赋初值(clinit)
- static变量
- 静态代码块
note: clinit: 1、如果类中没有static变量和静态代码块,clinit方法不会生成 2、在执行clinit方法时,必须先执行父类的clinit方法 3、clinit只会执行一次 4、clinit对static变量和静态代码块的赋值由定义的顺序决定