7.谈谈你对双亲委派模型的理解?⼯作过程?为什么要使⽤?
应⽤程序⼀般是由上诉的三种类加载器相互配合进⾏加载的,如果有必要,还可以加⼊⾃⼰定义的类加载器,它们

双亲委派模型的⼯作过程:
如果⼀个类加载器收到了类加载请求,它⾸先不会⾃⼰去尝试加载这个类,⽽是把这个请求委派给⽗类加载器去完
成。每⼀个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当⽗类
加载器反馈⾃⼰⽆法完成这个加载请求(它的搜索范围中没有找到所需的类)时,⼦加载器才会尝试⾃⼰去加载。
使⽤双亲委派模型的好处:
Java 类随着它的类加载器⼀起具备了⼀种带有优先级的层次关系。例如:类 java.lang.Object,它存放在 rt.jar
中,⽆论哪⼀个类加载器需要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进⾏加载,因此 Object
类在程序的各种类加载器环境中都是同⼀个类(使⽤的是同⼀个类加载器加载的)。相反,如果没有使⽤双亲委派
模型,由各个类加载器⾃⾏去加载的话,如果⽤户⾃⼰编写了⼀个 java.lang.Object 类,并放在程序的 ClassPath
中,那么系统将会出现多个不同的 Object 类,Java 类型体系中最基础的⾏为也就⽆法保证,应⽤程序也将变得⼀
⽚混乱。
双亲委派模型的主要代码实现:
实现双亲委派的代码都集中在 java.lang.ClassLoader 的 loadClass() ⽅法中,逻辑清晰易懂:先检查是否已经被加
载过,若没有加载则调⽤⽗加载器的 loadClass() ⽅法,若⽗加载器为空则默认使⽤启动类加载器作为⽗类加载
器。如果⽗类加载失败,抛出 ClassNotFoundException 异常后,再调⽤⾃⼰的 findClass() ⽅法进⾏加载。

浙公网安备 33010602011771号