7.谈谈你对双亲委派模型的理解?⼯作过程?为什么要使⽤?

应⽤程序⼀般是由上诉的三种类加载器相互配合进⾏加载的,如果有必要,还可以加⼊⾃⼰定义的类加载器,它们

的关系如下图所示:

双亲委派模型的⼯作过程:

如果⼀个类加载器收到了类加载请求,它⾸先不会⾃⼰去尝试加载这个类,⽽是把这个请求委派给⽗类加载器去完

成。每⼀个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当⽗类

加载器反馈⾃⼰⽆法完成这个加载请求(它的搜索范围中没有找到所需的类)时,⼦加载器才会尝试⾃⼰去加载。

 

使⽤双亲委派模型的好处:

Java 类随着它的类加载器⼀起具备了⼀种带有优先级的层次关系。例如:类 java.lang.Object,它存放在 rt.jar

中,⽆论哪⼀个类加载器需要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进⾏加载,因此 Object

类在程序的各种类加载器环境中都是同⼀个类(使⽤的是同⼀个类加载器加载的)。相反,如果没有使⽤双亲委派

模型,由各个类加载器⾃⾏去加载的话,如果⽤户⾃⼰编写了⼀个 java.lang.Object 类,并放在程序的 ClassPath

中,那么系统将会出现多个不同的 Object 类,Java 类型体系中最基础的⾏为也就⽆法保证,应⽤程序也将变得⼀

⽚混乱。

 

双亲委派模型的主要代码实现:

实现双亲委派的代码都集中在 java.lang.ClassLoader 的 loadClass() ⽅法中,逻辑清晰易懂:先检查是否已经被加

载过,若没有加载则调⽤⽗加载器的 loadClass() ⽅法,若⽗加载器为空则默认使⽤启动类加载器作为⽗类加载

器。如果⽗类加载失败,抛出 ClassNotFoundException 异常后,再调⽤⾃⼰的 findClass() ⽅法进⾏加载。

posted @ 2021-08-11 15:46  RainsX  阅读(133)  评论(0)    收藏  举报