一、介绍
实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。
二、作用
负责将 .class 文件(存储的物理文件)加载到内存中
三、类加载的分类
1. 分类
Bootstrap class loader:虚拟机的内置类加载器,通常表示为 null,并且没有 父null
Platform class loader:平台类加载器,负责加载 JDK 中一些特殊的模块
System class loader:系统类加载器,负责加载用户类路径上所指定的类库
2. 类加载器的继承关系
System 的父加载器为 Platform
Platform 的父加载器为 Bootstrap
四、类加载时机 用到就加载,不用不加载
1. 创建类的的实例(对象)
2. 调用类的类方法
3. 访问类或者接口的类变量,或者为该类变量赋值
4. 使用反射方式来强制创建某个类或接口对应的 java.lang.Class对象
5. 初始化某个类的子类
6. 直接使用 java.exe 命令来运行某个主类
五、类加载的过程
1. 加载 (根据查找路径找到相应的 class 文件然后导入)
通过包名 + 类名,获取这个类,准备用流进行传输
在把这个类加载到内存中
加载完毕创建一个 class 对象
2. 链接
(1)验证
确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全
(文件中的信息是否符合虚拟机规范有没有安全隐患)
(2)准备
负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值
(初始化静态变量)
(3)解析
将类的二进制数据流中的符号引用替换为直接引用
(本类中如果用到了其他类,此时就需要找到对应的类)
3. 初始化
根据程序员通过程序制定的主观计划去初始化类变量和其他资源
(静态变量赋值以及初始化其他资源)
六、小结
当一个类被使用的时候,才会加载到内存
类加载的过程:加载、验证、准备、解析、初始化
标签:初始化,变量,虚拟机,Platform,class,加载 From: https://www.cnblogs.com/Rover20230226/p/17467394.html