ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

4.加载器的分类

2022-07-13 20:32:45  阅读:197  来源: 互联网

标签:jre 分类 jdk ClassLoader work System 加载


JVM支持两种类型的类加载器,分别为引导类加载器(BootStrap ClassLoader)自定义类加载器(User-Defined ClassLoader)

>从概念上来说,自定义类加载器一般指程序中由开发人员自定义的一类类加载器,但是在java规范中并没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分到自定义类加载器中

>无论如何划分,常见的类加载器始终只有三个:

重点:上面类加载器的关系是上层包含层的关系

package jvm;
public class ClassLoaderTest {
    public static void main(String[] args) {
        //获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        //输出:sun.misc.Launcher$AppClassLoader@18b4aac2,发现其加载器是Launcher的内部类:AppClassLoader
        System.out.println(systemClassLoader);

        //获取其上层加载器,即扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        //输出:sun.misc.Launcher$ExtClassLoader@1540e19d,发现其上层加载器是扩展类加载器Launcher内部类ExtClassLoader
        System.out.println(extClassLoader);

        //获取引导类加载器
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        //输出null
        System.out.println(bootstrapClassLoader);

        //获取自定义类的加载器
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        //输出:sun.misc.Launcher$AppClassLoader@18b4aac2,对比上述输出得出,自定义类是由系统类加载器进行加载
        System.out.println(classLoader);

        //String等基本类库的加载
        ClassLoader stringClassLoader = String.class.getClassLoader();
        //输出null。对比上述得出,string等基本类库的加载是由最上层引导类加载器BootStrap ClassLoader进行加载的
        System.out.println(stringClassLoader);
    }
}

1.启动类加载器(又称之为引导类加载器BootStrap ClassLoader)

2.扩展类加载器(Extension  ClassLoader)

3.应用程序类加载器(系统类加载器,AppClassLoader)

public class ClassLoaderTest1 {
    public static void main(String[] args) {
        //启动类加载器(引导类加载器)
        URL[] urLs = Launcher.getBootstrapClassPath().getURLs();
        for (URL url : urLs) {
            //打印启动类加载器加载的jar包路径
            System.out.println(url.toExternalForm());
        }
        System.out.println("=========================");
        //扩展类加载器
        String extDir = System.getProperty("java.ext.dirs");
        for (String path : extDir.split(";")) {
            //打印扩展类加载器的加载路径
            System.out.println(path);
        }
    }
}
输出:
file:/E:/work/jdk/jre/lib/resources.jar
file:/E:/work/jdk/jre/lib/rt.jar
file:/E:/work/jdk/jre/lib/sunrsasign.jar
file:/E:/work/jdk/jre/lib/jsse.jar
file:/E:/work/jdk/jre/lib/jce.jar
file:/E:/work/jdk/jre/lib/charsets.jar
file:/E:/work/jdk/jre/lib/jfr.jar
file:/E:/work/jdk/jre/classes
=========================
E:\work\jdk\jre\lib\ext
C:\Windows\Sun\Java\lib\ext

用户自定义类加载器 


关于CloassLoader

ClassLoader是一个抽象类,所有的类加载器都继承于ClassLoader(不包含启动类加载器)

 

标签:jre,分类,jdk,ClassLoader,work,System,加载
来源: https://www.cnblogs.com/wmd-l/p/16475470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有