类加载器加载范围

启动类加载器(BootStrap ClassLoader)

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

扩展类加载器(Extendsion ClassLoader)

是Java实现的,独立jvm,主要负责加载<JAVA_HOME>\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;
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容