类加载器-双亲委派机制

简而言之,向上判断是否加载过,向下判断是否可以加载

当加载某类时(1、new一个类;2、调用Class.forName / ClassLoader.loadClass),先看当前类加载器(AppClassLoader)是否加载过,如果未加载过,委托给父加载器(ExtClassLoader),如果它也未加载过,继续委托给其父加载器(BootStrapClassLoader)

如果都未加载过,开始向下判断是否可以加载,BootStrapClassLoader > ExtClassLoader > AppClassLoader,但凡有可以加载的,即直接加载该类,若都无法加载,则抛出异常:ClassNotFoundException

图片来源:https://blog.csdn.net/codeyanbao/article/details/82875064

 

补充知识点:

Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。

ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。

AppClassLoader:主要负责加载应用程序的主函数类

 

posted @ 2022-01-22 11:19  realDevin  阅读(23)  评论(0编辑  收藏  举报