JAVA的类加载机制分为三个部分
一、加载
加载又分成三部分
- 将Class文件以字节流读入内存
- 将读入的字节流的静态存储结构转化为运行时的数据结构
- 生成一个该类的对象,作为访问这个类的入口
二、链接
也分成三部分
- 验证,确保字节流符合JVM规范
- 准备,为静态变量在方法区分配内存,并设置默认初始值
- 解析,JVM将常量池的符号引用替换为直接引用
三、初始化
根据程序中的赋值语句为变量赋值
四、其他
验证的四阶段
- 文件格式验证
- 元数据验证(是否符合Java语言规范)
- 字节码验证(确定程序语义合法,符合逻辑)
- 符号引用验证(确保下一步的解析能正常执行)
加载机制初始化细节
- 代码块顺序
父类的静态代码块->子类的静态代码块->初始化父类的属性值/父类的普通代码块(自上而下的顺序排列)->父类的构造方法->初始化子类的属性值/子类的普通代码块(自上而下的顺序排列)->子类的构造方法。
- 静态资源在类的初始化中只会执行一次
- 在2的基础上,非静态资源会随对象的创建而执行初始化。每创建一个对象,执行一次初始化。
以上为简单总结,具体可参考文章https://www.jianshu.com/p/202f6abb229c,望共同进步,peace~