类加载机制其实就是虚拟机把 Class 文件加载到内存,并对数据进行校验,转换解析和初始化,形成可以
虚拟机直接使用的 Java 类型,即 java.lang.Class 。
1.装载 Class 文件 -- > 二进制字节流 --> 类加载器
1 )通过一个类的全限定名获取这个类的二进制字节流
2 )将这个字节流所代表的静态存储结构转换为方法区的运行时数据结构
3 )在 java 堆中生成一个代表这个类的 java.lang.Class 对象,做为我们方法区的数据访问入口
2. 链接:
1 )验证:保证我们加载的类的正确性
文件格式验证
元数据验证
字节码验证
符号引用验证
2 )准备
为类的静态变量分配内存,并将其初始化为当前类型的默认值。
private static int a = 1 ; 那么他在准备这个阶段 a = 0 ;
3 )解析
解析 是从运行时常量池中的符号引用动态确定具体值的过程。
把类中的符号引用转换成直接引用
3. 初始化
执行到 Clinit 方法,为静态变量赋值,初始化静态代码块,初始化当前类的父类