欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

根类加载器的一个特性 博客分类: 原创 Java虚拟机SUNCC++ 

程序员文章站 2024-03-19 19:53:16
...
java 代码
  1.   
  2. public class Test {   
  3.   
  4.         public static void main(String[] args) {   
  5.            
  6.         Class c;   
  7.         ClassLoader cl,cl1;   
  8.         cl=ClassLoader.getSystemClassLoader();   
  9.         System.out.println(cl);   
  10.         while(cl!=null){   
  11.             cl1=cl;   
  12.             cl=cl.getParent();   
  13.             System.out.println(cl1+"'s parent is  "+cl);               
  14.         }   
  15.            
  16.            
  17.         try{   
  18.                
  19.             c=Class.forName("java.lang.Object");   
  20.             cl=c.getClassLoader();   
  21.             System.out.println("java.lang.Object's loader is "+cl);   
  22.                
  23.             c=Class.forName("Test");   
  24.             cl=c.getClassLoader();   
  25.             System.out.println("Test's loader is "+cl);   
  26.                
  27.                
  28.         }catch(Exception e){   
  29.                
  30.                
  31.         }   
  32.            
  33.            
  34.   
  35.     }   
  36.   
  37. }   

运行结果:
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虚拟机的核心代码.