常见的Java类加载器有哪些?

  • Post category:Java

我会结合示例详细讲解“常见的Java类加载器有哪些?”。

Java类加载器

Java中类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将class字节码文件加载到内存中,并生成Java类对象。

Java平台提供了三种类加载器,它们是:

  • 引导类加载器(Bootstrap ClassLoader)
  • 扩展类加载器(Extension ClassLoader)
  • 系统类加载器(System ClassLoader)

引导类加载器(Bootstrap ClassLoader)

引导类加载器是Java虚拟机(JVM)内置的类加载器,它负责加载Java平台核心库,如:rt.jar等。它是Java类加载器体系结构中最顶层的加载器。

引导类加载器是C/C++实现的,并不继承自java.lang.ClassLoader。

扩展类加载器(Extension ClassLoader)

扩展类加载器是Java虚拟机(JVM)自带的一种类加载器,它负责加载Java虚拟机(JVM)的扩展类库,默认加载Java平台扩展目录(JAVA_HOME/lib/ext/)中的jar包。

示例说明:

public class ExtensionClassLoaderDemo {
    public static void main(String[] args) {
        ClassLoader extensionClassLoader = ClassLoader.getSystemClassLoader().getParent();
        System.out.println(extensionClassLoader);

        String filePath = System.getProperty("java.home") + "/lib/ext/mysql-connector-java-5.1.39.jar";
        URL url = null;
        try {
            url = new URL("file:" + filePath);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{url});
        try {
            Class<?> aClass = urlClassLoader.loadClass("com.mysql.jdbc.Driver");
            System.out.println(aClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在示例代码中,我们可以看到,我们在扩展类路径下添加了mysql驱动的包,然后通过URLClassLoader加载mysql驱动的类。

系统类加载器(System ClassLoader)

系统类加载器是Java虚拟机(JVM)自带的一种类加载器,它负责加载当前应用程序(classpath)下的类。它是Java类加载器体系结构中最常用的加载器。

示例说明:

public class SystemClassLoaderDemo {
    public static void main(String[] args) {
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);

        // 加载当前应用程序(classpath)下的类
        try {
            Class<?> aClass = systemClassLoader.loadClass("com.example.MyClass");
            System.out.println(aClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在示例代码中,我们可以看到,我们通过系统类加载器加载了当前应用程序(classpath)下的com.example.MyClass类。

以上就是“常见的Java类加载器有哪些?”的完整使用攻略,希望对你有帮助。