【JVM学习笔记】扩展类加载器

扩展类加载器独有的特点,代码如下

public class Sample {
}
public class Test {

    static {
System.out.println("Test static block");
} public static void main(String[] args) {
System.out.println(Test.class.getClassLoader());
System.out.println(Sample.class.getClassLoader());
}
}

在控制台运行,结果如下

D:\workspace-learn\common-learn\learn-jvm\target\classes>java -Djava.ext.dirs=./ com.learn.jvm.loader.Test
Test static block
sun.misc.Launcher$AppClassLoader@334dcfad
sun.misc.Launcher$AppClassLoader@334dcfad

可以看到,即使我们已经通过 -Djava.ext.dirs=./ 指定了扩展类加载器的加载路径,并且在该路径下能够找到Test类和Sample类,但是运行结果表明这两个类依然是由系统类加载器所加载的。

这是因为扩展类加载器只加载jar包

通过以下命令对Sample.class进行打包

jar cvf Sample.jar ./com/learn/jvm/loader/Sample.class

然后再次运行,结果如下

D:\workspace-learn\common-learn\learn-jvm\target\classes>java -Djava.ext.dirs=./ com.learn.jvm.loader.Test
Test static block
sun.misc.Launcher$AppClassLoader@397d812b
sun.misc.Launcher$ExtClassLoader@5eab4b89

可以看出,这次Sample类正常加载了

上一篇:java--加强之 Java5的泛型


下一篇:[JDBC-2] JDBC CURD