广州网站建设程序员培训,小程序模板源下载,北京网页制作服务商,大连网页设计制作对 Java 程序的运行过程而言#xff0c;类的加载依赖类加载器完成#xff0c;而在 Java 默认的类加载器又分为启动类加载器、扩展类加载器和应用程序类加载器三种#xff0c;但是一个类通常仅仅需要被加载一次即可#xff0c;双亲委派机制即规定各个类该被何种类加载器加载…对 Java 程序的运行过程而言类的加载依赖类加载器完成而在 Java 默认的类加载器又分为启动类加载器、扩展类加载器和应用程序类加载器三种但是一个类通常仅仅需要被加载一次即可双亲委派机制即规定各个类该被何种类加载器加载的一种机制。
双亲委派机制的实现原理可以简述为两个方面分别是 “向上委托请求” 和 “向下委派加载”。
“向上委托请求”当一个类加载器收到加载类的请求时并不会直接对该类进行加载而是会先将加载请求委托给其当前父类加载器而当前父类加载器也会依次委托给其更上层的父类加载器直至达到顶层的启动类加载器。”向下委派加载“顶层的启动类加载器收到下层类加载器的加载类的请求后。会先判断自身即启动类加载器是否已经加载过该类如果未加载过则向下层的子类加载器寻求将该类进行加载。子类加载器则判断自身当前的类加载器有无加载该类的能力如果有能力加载该类则对该类进行加载如果无能力加载该类则继续向下层的类加载器传递该类的加载请求。
以下是对双亲委派机制的实现原理图示解读 双亲委派机制的设计是为保证 Java 核心库如 java.lang、java.util 等始终由启动类加载器来加载以保持这些核心类的唯一性、一致性、安全性避免不同的类加载器加载相同名称的类而导致类的冲突和混乱。其主要体现于如下方面 避免类的重复加载如果一个类已经被某个类加载器加载了那么另外一个类加载器是无法再次加载这个类的从而避免了类的重复加载。 避免恶意类的加载通过限制不受信任的类加载器加载系统类库以提高系统的安全性避免恶意类的加载和破坏。 例如定义一个 JDK 中重复的包路径 java.lang并在该包路径下定义一个类 package java.lang;public class CustomInteger {}然后定义一个类尝试去加载这个该类 package org.example.jvm;public class LoadSimpleClassTest {public static void main(String[] args) throws ClassNotFoundException {ClassLoader classLoader LoadSimpleClassTest.class.getClassLoader();Class? customIntegerClass classLoader.loadClass(java.lang.CustomInteger);System.out.println(customIntegerClass);}}执行上述案例将抛出如下异常 因为 java.lang 是 JAVA 中的核心包所以禁止直接以代码形式在项目中定义加载该包下的类。