黑马程序员技术交流社区

标题: 关于类加载器的疑问 [打印本页]

作者: 周兴华    时间: 2012-9-9 16:48
标题: 关于类加载器的疑问
本帖最后由 周兴华 于 2012-9-9 16:50 编辑

这是张老师关于类加载器的视频中的代码
public class ClassLoaderTest {
public static void main(String[] args) {
  System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());
  System.out.println(System.class.getClassLoader()); //System是有BootStrap加载器加载的
  ClassLoader load = ClassLoaderTest.class.getClassLoader();
  while(load != null){
   System.out.println(load.getClass().getName());
   load = load.getParent();
  }
  System.out.println(load);
}
}

我把这个类打成jar包放在我的JDK的JRE的lib里的ext目录下,即C:\Program Files\Java\jdk1.7.0_04\jre\lib\ext\itheima.jar
可是运行上面代码的结果是:
sun.misc.Launcher$AppClassLoader  //这说明ClassLoaderTest的类加载器还是AppClassLoader
null
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
null

然后我去目录下找并没有发现itheima.jar这个包,如图

然后我再把这个类打包,发现

这里把我搞郁闷了,我自己去c盘找没找到itheima.jar,用eclipse导出jar包时eclipse又告诉我有这个jar包。这到底是怎么回事呢?
另外我还确认过了我的运行环境也是JDK1.7的没错。


作者: 陈俊来    时间: 2012-9-9 17:24
张老师的用的是jdk1.6的
作者: 周兴华    时间: 2012-9-9 20:27
陈俊来 发表于 2012-9-9 17:24
张老师的用的是jdk1.6的

这跟jdk的版本应该没关系吧,只是如果你运行版本是jdk1.6的话,你导出的jar包就要放在jdk1.6的目录下;如果你的运行版本是jdk1.7的话,就把导出的jar包放在jdk1.7的目录下。我现在的问题是我直接去jdk1.7的目录下找不到我导出的jar包,而eclipse又告诉我已经有了这个jar包,这很矛盾!!而且程序的运行结果也不是像老师视频那样的,正常的结果应该是这个类是由ExtClassLoarder这个加载器加载的,而不是App加载器。




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