A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李敬卫 中级黑马   /  2013-1-24 20:04  /  2065 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ClassLoaderTest {
  //返回类加载器的名字
public static void main(String[] args) {

  System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());
  System.out.println(System.class.getClassLoader());
  ClassLoader loader=ClassLoaderTest.class.getClassLoader();
  while(loader!=null){
   System.out.println(loader.getClass().getName());
   loader=loader.getParent();
  }
  System.out.println(loader);
}
}
要获取ClassLoaderTest 类的类加载器的名称,loader.getParent()直接不就可以获取吗?为什么还要用到while循环呢?
还有就是我很想知道loader在什么情况下会等于null呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
他是要查看ClassLoaderTest 这个类的加载器的层次,不光要查看父类,还有父类的父类,如果上级没有加载器loader就为空了
回复 使用道具 举报
/*这是这段代码的运行结果
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader@addbf1
sun.misc.Launcher$ExtClassLoader
null
1.首先这段代码的目的是获取ClassLoaderTest所有的加载类,请明确题意。
2.当获取加载类为ExtClassLoader的时候,他的父加载类为空。*/

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
使用while循环是为了验证当前类的类加载器是否有父类的加载器并把父类加载器打印出来
当类加载器是引导类加载器时,打印的类加载器名称是null。
  1. public class ClassLoaderTest {
  2.   //返回类加载器的名字
  3. public static void main(String[] args) {

  4.   System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());//打印的是ClassLoaderTest类的类加载器
  5.   System.out.println(System.class.getClassLoader());//打印的是引导类加载器(也就是根加载器)
  6.   ClassLoader loader=ClassLoaderTest.class.getClassLoader();
  7.   while(loader!=null){
  8.    System.out.println(loader.getClass().getName());//打印的是本类的类加载器和本类加载器的父类加载器
  9.    loader=loader.getParent();
  10.   }
  11.   System.out.println(loader);//打印的是根类加载器
  12. }
  13. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马