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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-8-9 12:56  /  1268 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ClassLoaderTest {
       public static void main(String[] args) {
              System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getSuperclass().getName());
              ClassLoader loader=ClassLoaderTest.class.getClassLoader();
              ClassLoader parentLoader=loader.getParent();
              System.out.println(parentLoader.getClass().getName());
      }
}
第一个输出语句和第二个输出语句有什么区别?第一个输出语句是得到类加载器的Class对象,然后再得到其父类的对象,得到名字。第二个输出语句是得到类加载器,得到父类加载器,再得到父类加载器的Class对象,再得到名字,我认为结果是应该一样的,为什么不一样?求详解

3 个回复

倒序浏览
差别在于
getClass().getSuperclass().getName())        返回父类的名字
getParent().getClass.getName()        返回委托的父类加载器的名字

一个是父类,一个是父类加载器
回复 使用道具 举报

public class ClassLoaderTest {
       public static void main(String[] args) {
              System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getSuperclass().getName());
                        ClassLoaderTest.class.getClassLoader()--通过ClassLoaderTest 的字节码获得ClassLoaderTest 这个类的类加载器,
                        类加载器也是对象,所以调用getClass()获得类加载器的字节码,然后然后通过getSuperclass()获得类加载器的父类,然后获得父类的名字


              ClassLoader loader=ClassLoaderTest.class.getClassLoader();
              ClassLoader parentLoader=loader.getParent();这里你得到的是ClassLoader 类加载对象的类加载对象,类加载器对象不一样,所以下面得到的就不一样咯
              System.out.println(parentLoader.getClass().getName());
       
      }
}
回复 使用道具 举报
谢了,类加载器的父类和其委托的父类加载器不是同一个东西,是吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马