对类加载器(ClassLoader)中getParent的理解

源码:

 /**
     * 返回父类加载器以进行委派。
     * 一些实现可能用null来代表引导类加载器。如果此类加载器的父类(这里指的是类加载器中的父子关系,不是继承的父子关系)是引导类加载器,这个方法将在这些实现中将返回null。
     * 如果存在安全管理器,并且调用者的类加载器是不为null的,也不是类加载器的根加载器,
     * 则此方法将会调用SecurityManager#checkPermission(java.security.Permission)这个方法来验证允许访问父类加载器。反之则抛出异常。

简单的说:此方法返回下图委派模型中的一种类加载器。

在调用此方法时,如果当前调用者类加载器是扩展类加载器,因其父加载器是引导类加载器,则返回null。
     */

private final ClassLoader parent;
    @CallerSensitive
    public final ClassLoader getParent() {
        if (parent == null)
            return null;
        SecurityManager sm = System.getSecurityManager();
        if (sm != null) {
           //检查对父类加载器的访问
           //如果调用者的类加载器与此类加载器相同,
           //执行权限检查。
            checkClassLoaderPermission(parent, Reflection.getCallerClass());
        }
        return parent;
    }

双亲委派模型类加载器之间的关系:

对类加载器(ClassLoader)中getParent的理解

思路源自:https://blog.****.net/javazejian/article/details/73413292