# Java 类加载器有哪些

# Bootstrap 类加载器

启动类加载器主要加载的是 JVM 自身需要的类,这个类加载使用 C++ 语言实现的,没有父类,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib 路径下的核心类库或 **-Xbootclasspath 参数指定的路径下的 jar 包 ** 加载到内存中,注意必由于虚拟机是按照文件名识别加载 jar 包的,如 rt.jar,如果文件名不被虚拟机识别,即使把 jar 包丢到 lib 目录下也是没有作用的 (出于安全考虑,Bootstrap 启动类加载器只加载包名为 java、javax、sun 等开头

# Extention 类加载器

扩展类加载器是指 Sun 公司实现的 sun.misc.Launcher$ExtClassLoader 类,由 Java 语言实现的,父类加载器为 Bootstrap(null),是 Launcher 的静态内部类,它负责加载 **<JAVA_HOME>/lib/ext 目录下或者由系统变量 - Djava.ext.dir 指定位路径中的类库 **,开发者可以直接使用标准扩展类加载器

# Application 类加载器

称应用程序加载器是指 Sun 公司实现的 sun.misc.Launcher$AppClassLoader。父类加载器为 ExtClassLoader,它负责加载系统类路径 java -classpath 或 **-D java.class.path 指定路径下的类库 **,也就是我们经常用到的 classpath 路径,开发者可以直接使用系统类加载器,一般情况下该类加载是程序中默认的类加载器,通过 ClassLoader#getSystemClassLoader () 方法可以获取到该类加载器
​

# Custom 自定义类加载器

应用程序可以自定义类加载器,父类加载器为 AppClassLoader

image.png

更新于 阅读次数 次

请我喝[茶]~( ̄▽ ̄)~*

洪宽 微信支付

微信支付

洪宽 支付宝

支付宝

洪宽 贝宝

贝宝