类加载器加载范围

启动类加载器(BootStrap ClassLoader)

属于jvm自身的一部分,使用c++实现,主要负责加载\lib目录中或被-Xbootclasspath指定的路径中的并且文件名是被虚拟机识别的文件

扩展类加载器(Extendsion ClassLoader)

是Java实现的,独立jvm,主要负责加载\lib\ext目录中或被java.ext.dirs系统变量所指定的路径的类库
继承了ClassLoader

应用程序类加载器(Application ClassLoader)

Java实现的,独立于jvm,主要负责加载用户类路径(classPath)中的类库

用户自定义类加载器

Java实现的,独立于jvm,可以加载我们指定位置的类库
继承了ClassLoader

继承了ClassLoader的类加载器是无法加载全限定名以java.开头的类的,因为里面做了安全检查

    private ProtectionDomain preDefineClass(String name,
                                            ProtectionDomain pd)
    {
        if (!checkName(name))
            throw new NoClassDefFoundError("IllegalName: " + name);

        // Note:  Checking logic in java.lang.invoke.MemberName.checkForTypeAlias
        // relies on the fact that spoofing is impossible if a class has a name
        // of the form "java.*"
        //校验所有以java.开头的class文件抛出安全异常
        if ((name != null) && name.startsWith("java.")) {
            throw new SecurityException
                ("Prohibited package name: " +
                 name.substring(0, name.lastIndexOf('.')));
        }
        if (pd == null) {
            pd = defaultDomain;
        }

        if (name != null) checkCerts(name, pd.getCodeSource());

        return pd;
    }

你可能感兴趣的:(类加载器加载范围)