类的加载机制


类加载过程的演示图

类加载机制,其实就是虚拟机把Class文件加载到内存中,并对数据进行校验,转换解析和初始化,形成可以使得Java虚拟机直接能使用的Java类型,即java.lang.Class

步骤(其实也是类的生命周期):装载 -> 链接 -> 初始化 -> 使用 -> 卸载

1、装载

通过类加载器:将 Class文件 -> 2进制字节流 -> 通过类加载器找到它

    1. 通过一个类的全限定名获取这个类的二进制字节流
    1. 将这个字节流所代表的静态存储结构,转换为方法区的运行时数据结构
  • 3)在Java堆中,生成一个对象,代表这个类的对象java.lang.Class,作为我们方法区的数据访问入口

2、链接

2.1 验证(其实在装载之前就开始进行验证了,整个流程都有验证):保证我们加载的类的正确性

- 文件格式的验证
- 元数据的验证
- 字节码的验证
- 符号引用的验证

2.2 准备

为类的静态变量分配内存,并初始化为当前类型的默认值

比如:private static int a = 1, 在准备阶段,a的值默认为0的。

2.3 解析

什么是解析?解析是运行时常量池中符号引用动态确定具体值的过程[来自官网面试]

翻译成人话:把类中的符号引用转换成直接引用(内存中的引用关系)

什么是符号引用?

比如查看一个反编译文件: 反编译后的文件

3、初始化

此时会执行Clinit方法,该方法为静态变量赋值,初始化静态代码块,如果当前类有父类,也一并初始化当前类的父类


分类:Java
标签:
文章目录