类装载
类装载的条件
- 创建一个类的实例时,比如使用new关键字、克隆、序列化、反射等
- 调用类的静态方法、使用类的静态字段
- 使用reflect包中的反射类的方法时
- 初始化子类时要求先初始化父类
- 启动虚拟机时含有main方法的类
加载类
- 通过类的全名,获取类的二进制数据
- 解析类的二进制数据流为方法区的数据结构
- 创建java.lang.class类的实例,表示该类型
验证类
格式检查、语义检查、字节码验证、符号引用验证
解析类
将类、接口、字段和方法的符号引用转为直接引用
初始化
执行类的初始化方法 <clinit> (静态赋值语句及静态语句块)
ClassLoader
![摘自实战Java虚拟机](https://i-blog.csdnimg.cn/blog_migrate/5c59cfaa714866e75d83c01daa54a25d.jpeg)
图片摘自实战Java虚拟机