什么是类加载器?有哪些类加载器?代码举例讲解

类加载器是Java虚拟机中用于加载Class文件的重要组件。它的主要作用是将.class文件中的二进制数据转换为Class对象,用于程序的运行时使用。

Java有以下3种类加载器:

  1. 启动类加载器(Bootstrap ClassLoader):负责加载Java runtime library中的类,标识为null。
  2. 扩展类加载器(Extension ClassLoader):负责加载Java extensions目录中的类,标识为sun.misc.Launcher$ExtClassLoader。
  3. 应用程序类加载器(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)