您的位置:首页 > 编程语言 > Java开发

java ClassLoader / 显示classLoader 名字 / 层次关系

2016-01-05 20:10 603 查看
java 三种 classLoader

public void classLoaderTest(){
//0.扫盲,获取Class 对象两种方法
Iplong iplong = new Iplong("li", "jia");
System.out.println(Iplong.class); //class test.java.Iplong 上下等价 ,获取类的Class 对象,用类名.class获取
System.out.println(iplong.getClass());//class test.java.Iplong 用对象名的getClass()函数返回此 Object 的运行时类
//1.显示bootstrap classLoader 的方法
System.out.println(String.class.getClassLoader());//输出null,这个是bootstrap classLoader 你打印不出来他的名字
//sun.misc.Launcher$ExtClassLoader,这个是extension classLoader,\jdk1.7.0_60\jre\lib\ext这个目录下的类被其加载,
//2.显示extension classLoader (BlowfishCipher 类被他加载 )
System.out.println(BlowfishCipher.class.getClassLoader().getClass().getName());
//3.显示application classLoader,自己写的类被他加载
System.out.println(TestJDKClassLoader.class.getClassLoader().getClass().getName());//sun.misc.Launcher$AppClassLoader
//4.拿到系统的classLoader,也就是application classLoader,
System.out.println(ClassLoader.getSystemClassLoader().getClass().getName());//sun.misc.Launcher$AppClassLoader
//5.输出bootstrap classLoader,bootstrap class Loader 把其他的classLoader load 进来,其他的 classLoader 再去load 其他class
//以下两个都是bootstrap classLoader,这说明了ext classLoader 和app classLoader 都是被BootStrap classLoader加载的。注意,getParent()是app classLoader
//保存的指向ext classLoader 的引用
System.out.println(ClassLoader.getSystemClassLoader().getClass().getClassLoader());//null 即bootstrap classLoader,
System.out.println(ClassLoader.getSystemClassLoader().getParent().getClass().getClassLoader());//null 即bootstrap classLoader,

//ClassLoader的 getParent() 方法,这个方法体现的不是类继承,是对象与对象(ClassLoader在这里被实例化成一个个对象)之间的关系。是一种层次关系
ClassLoader c = TestJDKClassLoader.class.getClassLoader();
while(c!=null)
{
System.out.println(c.getClass().getName());//输出 sun.misc.Launcher$AppClassLoader sun.misc.Launcher$ExtClassLoader
c = c.getParent();//classLoader 会先去问他的parent ,你是不是加载了这个类,如果加载了,我就不继续加载了。
//可以保证安全性,防止有人写一个java.lang.String,其中有病毒,然后自己写一个类加载器去加载这个病毒
//此getParent()机制可以防止这种病毒类被加载
}
}



图1 classLoader 层次关系图
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: