类加载器继承关系
这个图讲的是ClassLoader从语法上是从谁继承的,这个图只是单纯的一个语法关系,不是继承关系,大家可以记住,和上面的类加载没有一点关系,过分的大家其实可以忽略这个图 双亲委派
父加载器: 父加载器不是"类加载器的加载器",也不是"类加载器的父类加载器"
双亲委派是一个孩子向父亲的方向,然后父亲向孩子方向的双亲委派过程
当一个类加载器收到了类加载请求时候,他会先尝试从自定义里面去找,同时它内部还维护了缓存,如果在缓存中找到了就直接返回结果,如果没有找到,就向父类进行委托,父类再去缓存中找,一直到最顶级的父类,如果这个时候还没有从缓存中获取到我们想要的结果,这个时候父亲就说我你这个事情,我办不了,你要自己动,然后儿子就自己去查询对应的class类并加载,如果到了最小的一个儿子还是没有找到对应的类,就会抛出异常 Class Not Found Exception
为什么要弄双亲委派?
这个是类加载器必问的一个面试题。
主要为了安全,如果任何一个Class都可以把他load到内存中的话,那么我写一个 java.lang.String,如果我写入了有危险的代码,是不是就会发生安全问题,并且可以保证Java核心api中定义的类型不会被随意替换,可以防止API内库被随意更改,其次是效率问题,如果有缓存在,直接从缓存里面拿,就不用一遍一遍的去遍历查询我们的父类或者子类了。
原创不易,一键三连是个好习惯!
我是牧小农,怕什么真理无穷,进一步有进一步的欢喜,大家加油!!!