类加载顺序
- 检测此class
是否载入
过(即在缓存区中是否有此Class),如果有则直接进入第8步
,否则执行第2步
。 - 如果
父类加载器
不存在(没有父类加载器,要么本身就是根类加载器,要么parent一定是根类加载器)
不存在
:执行第4步
;存在
:执行第3步
- 请求使用
父类加载器
去载入目标,如果载入成功
则进入第8步
,否则接着执行第5步
。 - 请求使用
根类加载器
去载入目标,如果载入成功
则进入第8步
,否则进入第7步
。 当前类加载器
尝试寻找Class文件(从与ClassLoader(类加载器)相关的类路径中寻找),
如果找到
则执行第6步
,找不到
则进入第7步
;- 从文件中载入Class,成功载入后进入第8步;
- 抛出
ClassNotFoundException
异常; - 返回对应的java.lang.Class对象。
注:
- 由于根类加载器不是使用java语言进行编写,因此无法获取根类加载器对象
- ClassNotFoundException:找不到类异常
以下为类加载的流程图