请问什么是Java类加载的父亲委托(Parent Delegation)机制,举例说明一下类加载的委托机制的运行过程以及基于父亲委托机制实现的类加载器的设计目的。
答:Java类加载的父亲委托机制是指,当程序请求加载类的时候,当前的加载器总是委托其父加载器帮其完成类的加载工作。在父亲委托机制中,各个加载器按照父子关系形成了树形结果,除了根类加载器以外,其余的类加载器都有且仅有一个父加载器。
举一个例子来说,假如有两个类加载器,它们分别是loader1和loader2,其中loader1是loader2的父加载器。现在在代码中出现下列语句要求加载器loader2加载一个Sample类:
Class sampleClass = loader2.loadClass("Sample");
那么整个委托过程是这样的:loader2首先从自己的命名空间中查找Sample类是否已经被加载过了,如果已经加载过,就直接返回代表Sample类的Class对象的引用。如果Sample类没有被加载,loader2首先请求loader1代之加载,loader1再请求系统类加载器代之加载,系统加载器再请求扩展类加载器代之加载,而扩展类加载器再请求根类加载器代之加载。如果根类加载器和扩展类加载器都无法加载Sample类,则系统类加载器会尝试加载Sample类,如果加载成功,则将Sample类所对应的Class对象的引用返回给loader1,loader1再将引用返回给loader2,从而成功将Sample类加载进虚拟机中。如果系统类加载器还是不能加载Sample类,则loader1会尝试加载Sample类。倘若loader1还是不能成功加载Sample类,那么现在只能依靠loader2自己来尝试加载这个类了,加载失败则抛出ClassNotFoundException异常。
父亲委托机制提出的意图很大程度上是考虑软件系统的安全问题。因为在这种机制下,用户定义的类加载器不可能加载应该由其父加载器加载的可靠类,从而防止不可靠甚至是恶意的代码代替由父加载器的可靠代码。
比如说,在这种机制下用户定义的类加载器都不可能加载包含由恶意代码的java.lang.Object类。
分享到:
相关推荐
java 面试java 面试java 面试java 面试java 面试
java面试问题集锦
JAVA面试问题,自己和别人总结JAVA面试问题,自己和别人总结
这份资源是一份包含1000+道Java面试题的整理版,旨在帮助广大Java开发者更好地准备面试,提升面试成功率。内容涵盖了Java的基础知识、高级特性、常见问题等多个方面,每个问题都附带了详细的答案解析,有助于读者...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
JAVA面试资料JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA...
JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题
java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题...
java面试问题小集 收集了一些面试题目
java面试题集合java面试题集合java面试题集合java面试题集合java面试题集合java面试题集合
常见Java面试问题,里面涵盖了基础的Java面试问题,有助于准备面试
java面试题目java面试题目java面试题目java面试题目java面试题目java面试题目
java对日外包面试题
java面试宝典2017版,各种java面试题汇总 java面试宝典2017版,各种java面试题汇总 java面试宝典2017版,各种java面试题汇总
日本公司java面试问题集。非常实用。适用于日企、软件外包、赴日软件开发。(日文)
java面试宝典2018版java面试宝典2018版java面试宝典2018版java面试宝典2018版
java面试宝典,最近5年133个Java面试问题列表。面试有很大的帮助
java面试问题大全,帮您成功!!!!!!!!!!!!