什么是ClassLoader?Java中有哪些不同类型的ClassLoader?代码举例讲解

ClassLoader 用于加载Java类到JVM中。当程序要使用某个类时,如果该类还没有被加载到JVM中,则系统会通过使用ClassLoader将其加载进来。

Java中有三种不同类型的ClassLoader:

  1. Bootstrap ClassLoader:这个ClassLoader使用C++编写,是JVM自带的ClassLoader,负责加载Java核心库。
  2. Extensions ClassLoader:这个ClassLoader负责加载Java扩展库,默认加载JAVA_HOME/lib/ext目录中的类。
  3. System ClassLoader:这个ClassLoader负责加载环境变量中CLASSPATH指定的类,是最常用的ClassLoader。
    除此之外,我们还可以自定义ClassLoader来加载类。自定义ClassLoader主要用于隔离类加载器加载的类和Java核心库中的类。

来看一个简单例子:我们可以编写三个Java程序来 simulate 这三种ClassLoader的工作过程。

Bootstrap ClassLoader:

public class BootstrapClassLoaderTest {
    public static void main(String[] args) {
        // Bootstrap ClassLoader负责加载Java核心库,如 rt.jar
        String s = "Hello";
        System.out.println(s);
    }
}

Extensions ClassLoader:

public class ExtensionsClassLoaderTest {
    public static void main(String[] args) { 
        // Extensions ClassLoader 负责加载Java扩展库
        String enc = System.getProperty("file.encoding");
        System.out.println(enc);
    }
}

System ClassLoader:

public class SystemClassLoaderTest {
    public static void main(String[] args) {
        // System ClassLoader 负责加载CLASSPATH下的类
        JFrame frame = new JFrame();
    } 
}

所以,ClassLoader负责将类加载到JVM中,而不同的ClassLoader加载不同来源和类型的类,Java程序的运行离不开ClassLoader的工作。