引入
Java语言系统中支持以下4种类加载器:
- Bootstrap ClassLoader 启动类加载器
- Extention ClassLoader 标准扩展类加载器
- Application ClassLoader 应用类加载器
- User ClassLoader 用户自定义类加载器
关系
这四种类加载器之间,是存在着一种层次关系的,如下图一般认为上一层加载器是下一层加载器的父加载器,那么,除了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去加载的,如图:
项目的class
mavan依赖的jar包
所以一个用户自定义的类,是无论如何也不会被Bootstrap和Extention加载器加载的。