精华内容
下载资源
问答
  • 扩展类加载器

    2020-05-30 18:14:37
    扩展类加载器(Extension) ​ 扩展类加载器是指由原SUN公司实现的sun.misc.Launcher类(是​PlatformClassLoader类),它是由java语言编写,父加载器是根类加载器。负责加载<JAVA_HOME>\jre\lib\ext目录下的...

    扩展类加载器(Extension)

    ​ 扩展类加载器是指由原SUN公司实现的sun.misc.Launcher类(是​PlatformClassLoader类),它是由java语言编写,父加载器是根类加载器。负责加载<JAVA_HOME>\jre\lib\ext目录下的类库或者系统变量"java.ext.dirs"指定的目录下的类库。

    以下是ExtClassLoader加载目录源码:

    private static File[] getExtDirs() {
         String s = System.getProperty("java.ext.dirs");
         File[] dirs;
         if (s != null) {
             StringTokenizer st =
                 new StringTokenizer(s, File.pathSeparator);
             int count = st.countTokens();
             dirs = new File[count];
             for (int i = 0; i < count; i++) {
                 dirs[i] = new File(st.nextToken());
             }
         } else {
             dirs = new File[0];
         }
         return dirs;
     }
    public static void main(String[] args) {
        //DNSNameService类位于dnsns.jar包中,它存在于jre/lib/ext目录下
        ClassLoader cl = DNSNameService.class.getClassLoader();
        System.out.println(cl);//打印结果sun.misc.Launcher$ExtClassLoader
    }

     

    展开全文
  • 类加载器分为根加载器(bootstrap classloader)、扩展类加载器(ext classloader)、系统类加载器(system classloader)、自定义类加载器(通常继承java.net.URLClassLoader,重写findClass()),它们的关系通常...
  • 当jvm启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器, 这块特殊的机器码叫做启动类加载器(Bootstarp)。 启动类加载器并不是Java类,而其它加载器则都是Java类。 启动类加载器是特定于平台的...

    内建于JVM中的启动类加载器会加载java.lang.ClassLoader以及其他java平台类,
    当jvm启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器,
    这块特殊的机器码叫做启动类加载器(Bootstarp)。
    启动类加载器并不是Java类,而其它加载器则都是Java类。
    启动类加载器是特定于平台的机器指令,它负责开启整个加载过程。
    所有类加载器(除了启动类加载器)都被实现为Java类,不过,总归要有一个组件来加载第一个Java类加载器,从而让整个加载过程能够顺利进行下去,加载第一个纯Java类加载器就是启动类加载器的职责。
    启动类加载器还会负责加载供JRE正常运行所需要的基本组件,这包括java.util与java.lang包中的类等等。

    展开全文
  • 当jvm启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器, 这块特使的机器码叫作启动类加载器(Bootstrap)。 启动类加载器并不是Java类,而其他的列加载器则是java类,启动类加载器特定于 平台...

    内建于jvm中的启动类加载器会加载java.lang.classloader以及其他的java类平台,
    当jvm启动时,一块特殊的机器码会运行,它会加载扩展类加载器与系统类加载器,
    这块特使的机器码叫作启动类加载器(Bootstrap)。

    启动类加载器并不是Java类,而其他的列加载器则是java类,启动类加载器特定于
    平台的机器指令,它负责开启整个加载过程。

    所有的类加载器(除了启动类加载器)都是java类,不过,总归要有一个组件来加
    载第一个java类加载器,从而让整个加载过程能够顺利进行下去,加载第一个纯java
    类加载器就是启动类加载器的职责。

    启动类加载器还会负责加载供jre正常运行所需要的基本组件,这包括java.util与java.
    lang包中的类等等。

    1、实例代码

    /**
     * @author dc
     * @date 2020/6/15 - 10:30
     */
    
    
    /**
     * 在运行期,一个java类是由该类的完全限定名(binary name,二进制名)和用于加载该类的定义类加载器
     * (defining loader)所共同决定的。如果同样名字(即相同的限定名)的类是由两个不同的加载器所加载,
     * 那么这类就是不同的,即便.class文件的字节码完全一样,并且从相同的位置加载也如此。
     */
    
    import sun.misc.Launcher;
    
    /**
     * 在Oracle的Hostpot实现中,系统属性sun.boot.class.path如果修改错了,则运行会出错,提示如下错误信息:
     * Error occurred during initialization of VM
     * java/lang/NoClassDefFoundError: java/lang/Object
     */
    public class MyTest14 {
    
        public static void main(String[] args) {
           /*
            System.out.println(System.getProperty("sun.boot.class.path"));
            System.out.println(System.getProperty("java.ext.dirs"));
            System.out.println(System.getProperty("java.class.path"));
    
    */
            //验证类加载器是由启动类加载器加载的
            System.out.println("classLoader's loader is " + ClassLoader.class.getClassLoader());
    
            //验证扩展类加载器与系统类加载器是由启动类加载器加载的
            System.out.println("Launcher's loader is " + Launcher.class.getClassLoader());
            //System.out.println("-----------------------------");
    
            //System.out.println(System.getProperty("java.system.class.loader"));
    
        }
    }
    

    2、运行结果

    在这里插入图片描述

    展开全文
  • 扩展类加载器的加载目录改为当前文件夹 按照经验,应该是使用扩展类加载器加载 但是结果: 还是使用应用类加载器加载 原因:是因为,扩展类加载器,并不能直接加载class文件,而是加载jar包 演示: 将MyTest1....

    在这里插入图片描述
    在这里插入图片描述

    将扩展类加载器的加载目录改为当前文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    按照经验,应该是使用扩展类加载器加载
    但是结果:
    在这里插入图片描述
    还是使用应用类加载器加载

    原因:是因为,扩展类加载器,并不能直接加载class文件,而是加载jar包
    演示:
    将MyTest1.Class打包
    在这里插入图片描述
    在这里插入图片描述
    再次运行刚才的命令
    在这里插入图片描述
    将命令改动下
    在这里插入图片描述
    将扩展类加载器加载目录修改为根目录下
    在这里插入图片描述
    因为此时,扩展类加载器在此目录下找不到该MyTest.Class

    展开全文
  • 类加载器命名空间总结与扩展类加载器要点分析 类加载器的双亲委托模型的好处: ​ 可以确保Java核心库的类型安全:所有Java应用都至少会引用java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被...
  • JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)。 这里的自定义加载器指的不是开发人员自己定义的类加载器,而是指的所有继承自ClassLoader...
  • 扩展类加载器只能加载jar包中的内容 启动类加载器,应用类加载器可以直接加载.class文件
  • 从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。 无论类加载器的类型如何...
  • Java中的类和类加载器一起 唯一确定类在jvm中的一致性。 BootStrapClassLoader <- ExtClassLoader <- AppClassLoader <- 自定义类加载器 启动类加载器:主要负责加载 java.home 下的 lib 目录下的...
  • 扩展类加载器加载目录 打印扩展类加载器目录 System.out.println(System.getProperty("java.ext.dirs")); 打印结果如下: D:\Java\jdk1.8.0_152\jre\lib\ext;C:\windows\Sun\Java\lib\ext 那么接下来我要做的一个...
  • 类的加载的最终产品是位于堆(heap)中的class对象 Class对象封装了类在方法区内的数据结构并向Java程序员提供访问方法区内的数据结构的接口。而反射就像一面镜子一样可这个接口是反射的...2、 用户自定义类加载器...
  • 1、类加载器双亲委托模型的好处 1、可以确保java核心库的类型安全:所有的java应用都至少会引用java.lang.Object类,也就是说在运行期,这个类会被加载到虚拟机中;如果这个加载过程是由自定义类加载器所完成的,...
  • 扩展类加载器的加载问题

    千次阅读 2014-10-24 18:17:47
    这三个加载器是父子关系,其中 bootstrap 类加载器在顶端,而 system 加载器在结构的最底层。同时他们都采取向上传递的机制,即有了要加载的类,先问问自己的父加载器,若父加载器不能加载,自己再加载。 我们写了一个...
  • 扩展类加载器独有的特点,代码如下 public class Sample { } public class Test { static { System.out.println("Test static block"); } public static void main(String[] args) { ...
  • 类加载器命名空间总结: 类加载器的双亲委托模型的好处: 可以确保Java核心库【如JDK中rt.jar里面的类】的安全:所有的Java应用至少会引用java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载...
  • 各类加载器虽然以父子相称,但是没有继承关系(视频教程推荐:java课程)点入ClassLoader的源码查看样例:* * class NetworkClassLoader extends ClassLoader {* String host;* int port;** public Class findClass...
  • 类加载器的双亲委派模型 更改ExtClassloader加载路径 1、代码示例: package com.nmj.classloader; public class Test1 { static{ System.out.println("Test1 static code block"); } public static void main...
  • 自定义扩展类加载器

    2019-10-01 20:50:44
    分三个步骤:第一步写测试代码,第二步写读取class文件逻辑,第三部通过自定义类加载器获取测试代码输出结果 (1)编写测试代码 public class Robot { static { System.out.println("Robot class : hello ...
  • 类加载器的双亲委托模型的好处 可以确保Java核心库的类型安全:所有的Java应用都至少会引用java.lang.object类,也就是说在运行期,java.lang.object这个类会被加载到java虚拟机中;如果这个加载过程是由Java应用...
  • 1、可以确保Java核心库的类型安全:所有的Java应用都至少会引用Java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载到Java虚拟机中,如果这个加载过程是由Java应用自己的类加载器所完成的, ...
  • 扩展类加载器-------改变JAVA的父优先类加载顺序 java的类加载机制默认情况下是采用委托模型:当加载某个类时JVM会首先尝试用当前类加载器的父类加载器加载该类,若父类加载器加载不到再由当前类...
  • 类的加载的最终产品是位于堆(heap)中的class对象 Class对象封装了类在方法区内的数据结构并向Java...下面我们来详细的介绍一下类加载器 类的加载器有两种 1、 Java虚拟机自带的加载器 2、 用户自定义类加载

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,874
精华内容 1,149
关键字:

扩展类加载器