首先说一下它的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己确实无法完成这个加载请求(它的搜索范围内没有找到所需的类)的时候,子加载器才会尝试自己去完成加载。
使用双亲委派模型来组织类加载器之间的关系,一个显而易见的好处就是Java中的类随着它的类加载器一起具备了一种带有优先级的层次关系,例如java.lang.Object,它存放在rt.jar之中,无论哪一个类加载器都要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都能够保证是同一个类。
反之,如果没有使用双亲委派模型,都由各个类加载器自行去加载的话,如果用户自己也编写了一个名为java.lang.Object的类,并放到了程序的ClassPath里,那系统就会出现多个不同的Object类,Java类型体系中最基础的行为也无从保证,应用程序将会变得一团糟。
版权声明:本文为qq_39149841原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。