当前位置:  首页>> 技术小册>> Java面试指南

Java中的类加载器介绍

Java中的类加载器(ClassLoader)是Java平台的一个核心组件,它负责将Java类的字节码从磁盘加载到内存中,并构造出类的对象。Java虚拟机提供了三种类加载器:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。每个类加载器都有其特定的加载范围和加载顺序,不同的类加载器可以互相协作来完成类的加载。

Bootstrap ClassLoader:Bootstrap ClassLoader是Java虚拟机的内置类加载器,它负责加载Java虚拟机的核心类库,如java.lang包中的类。Bootstrap ClassLoader是C++编写的,无法通过Java代码来直接引用。

Extension ClassLoader:Extension ClassLoader是Java虚拟机的扩展类加载器,它负责加载Java虚拟机的扩展类库,如javax包中的类。Extension ClassLoader是Java编写的,可以通过Java代码来直接引用。

Application ClassLoader:Application ClassLoader是Java虚拟机的应用程序类加载器,它负责加载应用程序中的类。Application ClassLoader是Java编写的,可以通过Java代码来直接引用。

下面是一个简单的示例代码,用来演示Java中的类加载器:

  1. public class ClassLoaderDemo {
  2. public static void main(String[] args) {
  3. ClassLoader classLoader = ClassLoaderDemo.class.getClassLoader();
  4. while (classLoader != null) {
  5. System.out.println(classLoader);
  6. classLoader = classLoader.getParent();
  7. }
  8. }
  9. }

在上面的代码中,我们通过调用ClassLoaderDemo类的getClassLoader()方法获取了ClassLoaderDemo类的类加载器。然后,我们使用while循环遍历ClassLoaderDemo类的类加载器以及其父类加载器,并将其打印到控制台上。

运行上面的代码,我们可以看到如下的输出结果:

  1. sun.misc.Launcher$AppClassLoader@18b4aac2
  2. sun.misc.Launcher$ExtClassLoader@7852e922

在上面的输出结果中,第一行输出了Application ClassLoader的信息,第二行输出了Extension ClassLoader的信息。由此可见,ClassLoaderDemo类是由Application ClassLoader加载的,而Application ClassLoader又是由Extension ClassLoader加载的。最终,Bootstrap ClassLoader将作为顶级类加载器,并且无法通过Java代码直接引用。


该分类下的相关小册推荐: