类加载器加载Class大致过程:
- S1: 检测此Class是否载入过(即在缓冲区是否有此class),如果有则直接进入S8,否则执行S2
- S2: 检查父类加载器是否存在,如果存在则执行S3;如果不存在(如果没有父类加载器,要么parent一定是根类加载器,要么本身就是根类加载器),则执行S4
- S3: 请求使用父类加载器载入目标类,如果成功则跳到S8,否则执行S5
- S4: 请求使用根类加载器载入目标类,如果成功则跳到S8,否则执行S7
- S5: 当前类加载器尝试寻找Class文件(从此ClassLoader相关路径中寻找),如果找到则执行S6;否则执行S7
- S6: 从文件中载入Class,成功后执行S8
- S7: 抛出ClassNotFoundException异常
-
S8: 返回对应的java.lang.Class对象
类加载器加载Class.jpg
网友评论