日期:2014-05-17  浏览次数:20662 次

类加载器的问题求助,急,谢谢!
请看以下代码:

public class Test {
public static void main(String[] args) {
ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
Thread.currentThread().setContextClassLoader(systemLoader.getParent());
System.out.println(Thread.currentThread().getContextClassLoader());

Test t = new Test();
System.out.println(t.getClass().getClassLoader());
}
}

输出结果如下:

sun.misc.Launcher$ExtClassLoader@addbf1
sun.misc.Launcher$AppClassLoader@19821f


我的问题是:
我在main方法的当前线程已经设置了类加载器为ExtClassLoader,那么创建Test对象的时候,为什么还是AppClassLoader加载了呢?
书上说如果设定了当前线程的加载器,那么当前线程在加载类的时候,都会采用设定好的加载器啊。
所以创建Test对象的时候应该打印ExtClassLoader才对啊,为什么还会是AppClassLoader呢?
谢谢大家!

------解决方案--------------------
问楼主个问题,
sun.misc.Launcher$ExtClassLoader@addbf1中的@后面的几个字符是什么。
第二,一般情况下,设定类加载器有什么用处?