根类加载器的一个特性 博客分类: 原创 Java虚拟机SUNCC++
程序员文章站
2024-03-19 19:53:16
...
java 代码
- public class Test {
- public static void main(String[] args) {
- Class c;
- ClassLoader cl,cl1;
- cl=ClassLoader.getSystemClassLoader();
- System.out.println(cl);
- while(cl!=null){
- cl1=cl;
- cl=cl.getParent();
- System.out.println(cl1+"'s parent is "+cl);
- }
- try{
- c=Class.forName("java.lang.Object");
- cl=c.getClassLoader();
- System.out.println("java.lang.Object's loader is "+cl);
- c=Class.forName("Test");
- cl=c.getClassLoader();
- System.out.println("Test's loader is "+cl);
- }catch(Exception e){
- }
- }
- }
运行结果:
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$AppClassLoader@19821f's parent is sun.misc.Launcher$ExtClassLoader@addbf1
sun.misc.Launcher$ExtClassLoader@addbf1's parent is null
java.lang.Object's loader is null
Test's loader is sun.misc.Launcher$AppClassLoader@19821f
注意红色区域的运行结果.之所以最后他们返回的父加载根加载器为NULL的原因是因为JAVA虚拟机并不会向JAVA程序提供根类加载器的引用,而是返回NULL来表示根类加载器,这样做是为了保护JAVA虚拟机的安全,防止黑客利用根加载器来加载非法的类,从而破坏JAVA虚拟机的核心代码.