1.类的生命周期:
* 加载、验证、准备、解析、初始化、使用、卸载
* 验证、准备、解析 并称为连接
* 顺序固定的阶段:加载、验证、准备、初始化、卸载,解析阶段可以在某些情况下在初始化阶段之后再开始。
2.加载
* 获取此类的二进制流
* 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
* 在内存中生成代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
3.验证
* 文件格式验证
* 元数据验证
* 字节码验证
* 符号引用验证
4.准备
* 给类变量(static修饰的变量)分配内存并设置类变量的初始值
* 常量直接赋值
5.解析
* 将常量池中的符号引用替换为直接引用
6.初始化
* 执行类构造器<clinit>()方法的过程,包括给类变量赋值;执行父类<clinit>()方法;多线程环境保证只有一个线程去执行类的初始化操作。