类加载的过程以及双亲委派模型
目录
(一)类加载的过程
(1)加载
(2)验证
(3)准备
(4)解析
(5)初始化
(二)类加载出现在什么时候
(三)双亲委派模型
(1)类加载器
(2)流程
(3)目的
(一)类加载的过程
(1)加载
-
根据代码中编写的“全限定类名”,找到.class文件。
-
打开文件,读取文件内容到内存中。
-
数据格式的解析(Java虚拟机规范 规定了 .class 文件的结构)。
(2)验证
校验读取内容是否合法。
(3)准备
给 类对象 分配“未初始化”内存空间。
(4)解析
对代码中的 常量 加载。
(5)初始化
-
类的 静态成员/静态代码块,进行加载。
-
父类/要实现的接口,进行加载。
(二)类加载出现在什么时候
一个类直到第一次用到,JVM才加载。
-
构造某个类的实例。
-
使用类的静态方法,使用类的静态成员。
-
使用类的子类。
(三)双亲委派模型
根据 全限定类名 找到对应的 .class 文件的过程。
(1)类加载器
-
Bootstrap ClassLoader:在Java标准库中查找。
-
Extension ClassLoader:在Java扩展库中查找。
-
Application ClassLoader:在 Java第三方库/当前项目 中查找。
(2)流程
(3)目的
确保先加载标准库,再加载扩展库,最后加载第三方库。