ClassLoader 用于加载Java类到JVM中。当程序要使用某个类时,如果该类还没有被加载到JVM中,则系统会通过使用ClassLoader将其加载进来。
Java中有三种不同类型的ClassLoader:
- Bootstrap ClassLoader:这个ClassLoader使用C++编写,是JVM自带的ClassLoader,负责加载Java核心库。
- Extensions ClassLoader:这个ClassLoader负责加载Java扩展库,默认加载JAVA_HOME/lib/ext目录中的类。
- 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的工作。