类加载器是Java虚拟机中用于加载Class文件的重要组件。它的主要作用是将.class文件中的二进制数据转换为Class对象,用于程序的运行时使用。
Java有以下3种类加载器:
- 启动类加载器(Bootstrap ClassLoader):负责加载Java runtime library中的类,标识为null。
- 扩展类加载器(Extension ClassLoader):负责加载Java extensions目录中的类,标识为sun.misc.Launcher$ExtClassLoader。
- 应用程序类加载器(Application ClassLoader):负责加载用户路径下的类,标识为sun.misc.Launcher$AppClassLoader。
类加载器按照父委派的机制进行工作:每次加载类时,先将这个任务委派给父类加载器,如果父类加载器无法完成,才会尝试自己去加载该类。
来看一个简单例子:
public class ClassLoaderDemo {
public static void main(String[] args) {
// 获取系统类加载器
ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
// 获取扩展类加载器
ClassLoader extLoader = systemLoader.getParent();
// 应用程序类加载器
ClassLoader appLoader = extLoader.getParent();
// 判断类加载器是否为启动类加载器
boolean isBootstrap = systemLoader.getParent() == null;
}
}
该程序运行时,类加载器的层次关系如下:
启动类加载器(null)
↑
扩展类加载器(sun.misc.Launcher$ExtClassLoader)
↑
应用程序类加载器(sun.misc.Launcher$AppClassLoader)