当一个特定的类加载器收到加载类的任务请求时,这个类加载器首先会查看自己已完成加载的类是否会包含这个类,如果包含就返回以响应当前请求,如果没有,就会把此任务交给parent父加载器去处理,父加载器如果可以完成此任务请求就返回以响应此任务请求,当父加载器无法完成这个任务时,才会自己亲自加载。
不如举例说明:我们婚房看作类Class,使用婚房结婚的任务 看作为一个类加载任务请求ClassLoad。
当前的场景是只有三代的场景:
现在你儿子结婚要一套婚房,你儿子首先想到的看看自己的存款够不够,存款是过去的积累,这里寓意就是检查过去的经历是否承担其这个类加载请求,即是否过去已加载过findLoadedClass就是检查钱包的过程。不够肯定是先找到你说:“老爸,我想结婚,丈母娘要婚房”。 而你这时候,你接到这请求,你也是先看,你钱包够不够,不够,你也是先找你的爸爸帮忙,刚好,你的爸爸钱包够,或者就有一套多余的房子,那就找到了婚房了。否则,你爸(孩子他爷爷)说他没有,没有,那你就得处理这个请求,找各种亲戚东筹西借,最后结果就是2个一个是你处理得了,另外就是你也处理不了。你没办到,你告诉你儿子,没搞定。那你儿子自己搞定,你儿子自己找同学找同事贷款等其他途径就是他自己的事情了。办到了,说明就处理这个任务请求。没办到,你儿子就会得到一个结果:没有婚房的小事故。放在程序里就会是一个ClassNotFunndException 。
class loader 双亲委派模式