黑马程序员技术交流社区

标题: 类加载器问题 [打印本页]

作者: 孙飞    时间: 2012-8-9 12:56
标题: 类加载器问题
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对象,再得到名字,我认为结果是应该一样的,为什么不一样?求详解

作者: 朱志辉    时间: 2012-8-9 18:23
差别在于
getClass().getSuperclass().getName())        返回父类的名字
getParent().getClass.getName()        返回委托的父类加载器的名字

一个是父类,一个是父类加载器

作者: 王飞    时间: 2012-8-9 18:48

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());
       
      }
}
作者: 孙飞    时间: 2012-8-9 23:14
谢了,类加载器的父类和其委托的父类加载器不是同一个东西,是吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2