引入

Java语言系统中支持以下4种类加载器:

  • Bootstrap ClassLoader 启动类加载器
  • Extention ClassLoader 标准扩展类加载器
  • Application ClassLoader 应用类加载器
  • User ClassLoader 用户自定义类加载器

    关系

    这四种类加载器之间,是存在着一种层次关系的,如下图
    image.png

    一般认为上一层加载器是下一层加载器的父加载器,那么,除了BootstrapClassLoader之外,所有的加载器都是有父加载器的。

各个类加载器的职责

  • Bootstrap ClassLoader ,主要负责加载Java核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。
  • Extention ClassLoader,主要负责加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
  • Application ClassLoader ,主要负责加载当前应用的classpath下的所有类
  • User ClassLoader , 用户自定义的类加载器,可加载指定路径的class文件

    例如,我们正常使用maven打了一个可运行的springboot包,那么项目所依赖的第三方包都是被Application ClassLoader去加载的,如图:

image.png
项目的class
image.png
mavan依赖的jar包
image.png

所以一个用户自定义的类,是无论如何也不会被Bootstrap和Extention加载器加载的。