我会结合示例详细讲解“常见的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类加载器有哪些?”的完整使用攻略,希望对你有帮助。