(1)加载(Loading)
1通过一个类的全限定名获取定义类的二进制字节流
2将字节流代表的静态储存结构转化为方法区的运行时数据结构
3内存中生成一个代表这个类的class对象 作为方法区这个类的各种数据访问入口
4加载class文件方式
本地系统中直接加载 通过网络获取 通过zip压缩包获取 动态代理
(2)链接 --(验证--准备--解析)
验证: 目的在于确保class文件的字节流中包含信息符合当前虚拟机要求 保证被加载类的正确性
主要有四种验证 文件格式验证 元数据验证 字节码验证 符号引用验证
准备: 为类变量分配内存设置该类变量默认初始值,
这里不包含用final修饰的static 因为final在编译的时候就会分配了 ,准备阶段会显示初始化
不会为实例变量分配初始化,变量会分配在方法区中,实例变量是会随着对象一起分配到java堆中
解析 将常量池内的符号引用转换为直接引用过程
事实上 解析操作往往伴随着jvm在执行初始化之后再执行
(3)初始化
初始化阶段就是执行类构造器方法



