有没有双亲委派机制代码演示
时间: 2023-10-06 11:10:25 浏览: 43
当 Java 虚拟机需要加载一个类时,它首先会委派给父类加载器去加载,如果父类加载器无法加载该类,则该类的加载任务交给当前类加载器来完成。
以下是一个简单的双亲委派机制的代码演示:
```java
public class ClassLoaderDemo {
public static void main(String[] args) {
// 获取系统类加载器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
System.out.println("系统类加载器:" + systemClassLoader);
// 获取系统类加载器的父类加载器,即扩展类加载器
ClassLoader extensionClassLoader = systemClassLoader.getParent();
System.out.println("扩展类加载器:" + extensionClassLoader);
// 获取扩展类加载器的父类加载器,即引导类加载器
ClassLoader bootstrapClassLoader = extensionClassLoader.getParent();
System.out.println("引导类加载器:" + bootstrapClassLoader);
// 测试当前类由哪个类加载器进行加载
ClassLoader classLoader = ClassLoaderDemo.class.getClassLoader();
System.out.println("当前类的加载器:" + classLoader);
}
}
```
输出结果:
```
系统类加载器:sun.misc.Launcher$AppClassLoader@18b4aac2
扩展类加载器:sun.misc.Launcher$ExtClassLoader@7f31245a
引导类加载器:null
当前类的加载器:sun.misc.Launcher$AppClassLoader@18b4aac2
```
从输出结果可以看出,系统类加载器是由引导类加载器加载的,扩展类加载器是由系统类加载器加载的,当前类的加载器是系统类加载器。这就是双亲委派机制的具体实现。