2026-10-30 13:00:30
Java类加载器详解
类加载器(class loader)是Java虚拟机(JVM)的一个重要组成部分,它负责将Java类(.class文件)加载到JVM中,并转换成java.lang.Class类的一个实例。通过这个实例,可以创建出该类的一个对象,并调用其方法。以下是关于Java类加载器的详细解析。
一、类加载器的作用
类加载器的主要作用是将Java字节代码(.class文件)加载到JVM中,并转换成java.lang.Class类的一个实例。这个实例代表了Java类在JVM中的存在,通过它可以创建出该类的对象,并调用其定义的方法和属性。
二、类加载的过程
验证(Verification):确保加载的类符合Java语言的规范,没有破坏JVM的安全。
准备(Preparation):为类的静态变量分配内存,并设置默认的初始值(如int类型的静态变量默认值为0)。
解析(Resolution):将常量池中的符号引用转换为直接引用,如将类名、方法名等转换为对应的内存地址。
三、类加载器的层次结构
Java的类加载器具有层次结构,主要包括以下几种:
启动(Bootstrap)类加载器:
由C++实现,是JVM的一部分。
负责加载<JAVA_HOME>/lib路径下的核心类库,如rt.jar等。
由于安全考虑,只加载包名为java、javax、sun等开头的类。
扩展(Extension)类加载器:
由Java实现,负责加载<JAVA_HOME>/lib/ext目录下的jar包。
也可以通过-Djava.ext.dirs参数指定额外的扩展类库路径。
应用程序(Application)类加载器:
也称为系统类加载器(System ClassLoader)。
负责加载应用程序类路径(classpath)上的类。
包括用户自定义的类、第三方库等。
自定义(Custom)类加载器:
由应用程序根据需要自行实现的类加载器。
如Tomcat、JBoss等服务器会根据J2EE规范自行实现类加载器,以支持热部署、类隔离等功能。
四、类加载的双亲委派模型
Java的类加载器采用双亲委派模型(Parent Delegation Model),即当一个类加载器需要加载一个类时,它会首先将其委派给父类加载器去加载。如果父类加载器无法加载该类(即父类加载器搜索范围中没有找到该类),则子类加载器才会尝试自己去加载该类。
双亲委派模型的好处是:
五、类加载器的加载顺序
在双亲委派模型下,类加载器的加载顺序如下:
六、示例图片
以下图片展示了Java类加载器的层次结构和双亲委派模型:

七、总结
Java类加载器是JVM的一个重要组成部分,它负责将Java类加载到JVM中,并转换成java.lang.Class类的一个实例。通过类加载器,可以创建出类的对象,并调用其方法。Java的类加载器具有层次结构,并采用双亲委派模型来确保类的唯一性和安全性。了解类加载器的原理和机制,对于深入理解Java的运行时特性和进行高效的Java开发具有重要意义。