JVM学习笔记(4)之扩展类加载器

扩展类加载器加载目录
打印扩展类加载器目录 System.out.println(System.getProperty("java.ext.dirs"));

打印结果如下:
D:\Java\jdk1.8.0_152\jre\lib\ext;C:\windows\Sun\Java\lib\ext

那么接下来我要做的一个操作是让扩展类加载去加载我们自己定义的类,所以执行的时候手动的去改变加载类目录,这是代码.

**MyTest1类**
    public class MyTest1 {

    public static void main(String[] args) {

        System.out.println(Child1.str1);

    }
}
**MyTest22类**
package com.zh.classloader;

/**
 * @author Jack
 * @version 1.0
 * @date 2019/10/26 1:20
 */
public class MyTest22 {

    static {
        System.out.println("MyTest22 static block");
    }

    public static void main(String[] args) {
        System.out.println("MyTest1:" + MyTest1.class.getClassLoader());
        System.out.println("MyTest22:" + MyTest22.class.getClassLoader());
    }
}

进入到class文件目录下,然后执行

java -Djava.ext.dirs=./ com.zh.classloader.MyTest22

-Djava.ext.dirs=./是设置扩展类目录为当前class文件目录,执行的结果

在这里插入图片描述
why?不是改变了目录后,扩展类加载器应该能找到啊,怎么最后加载的还是系统类加载器呢?
原来是这样的,扩展类加载器去加载的时候首先会去指定的扩展类目录去查找有没有jar文件,然后再去加载其中的class文件,通过

jar cvf test.jar com/zh/classloader/MyTest1.class

将目录下的class文件打包到test.jar的jar包下
在这里插入图片描述
再次执行

java -Djava.ext.dirs=./ com.zh.classloader.MyTest22

在这里插入图片描述

输出结果却是已经是由扩展类加载器加载了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值