扩展类加载器加载目录
打印扩展类加载器目录 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
输出结果却是已经是由扩展类加载器加载了