文章目录
一、类加载时机
1、隐式加载
2、显式加载
二、类加载步骤
一、类加载时机
1、隐式加载
类加载 的 隐式加载 , 没有明确的说明加载某个类 , 但是进行了如下操作 :
使用 new 关键字 直接 创建类的实例对象 ;
使用 new 关键字 直接 创建类的 子类 实例对象 ;
通过 反射方式 创建 类 / 子类 实例对象 ;
访问 类的 静态变量 , 对静态变量 进行 读 或者 写 操作 都会触发 隐式加载 ;
访问 类的 静态函数 ;
2、显式加载
显式加载 : 明确的说明要加载某个类 ,
使用 Class.forName() 加载指定的类 ;
使用 ClassLoader.loadClass 加载指令的类 ;
二、类加载步骤
参考 【Java 虚拟机原理】Java 类加载过程 ( 加载 | 连接 - 验证 准备 解析 | 初始化 | 使用 | 卸载 ) 博客 ;
类加载步骤 :
① 装载 : 加载某个类时 , 首先要 查找 并 导入 Class 字节码文件 ;
② 链接 : 该阶段 , 可以分为以下 3 33 个子阶段 ;
验证 : 验证字节码文件是否正确 ;
准备 : 为 静态变量 划分内存空间 , 并进行默认值赋值 ;
解析 : 将 " 常量池 " 中的 " 符号引用 " 转为 " 直接引用 " ;
③ 初始化 : 调用 clinit 函数 , 初始化 静态变量 静态代码块 ;