问一个 classpath 的问题,不是基本的问题,是一个疑惑(50分)

  • 主题发起人 主题发起人 阿魁
  • 开始时间 开始时间

阿魁

Unregistered / Unconfirmed
GUEST, unregistred user!
大家一般都设置 classpath=.;c:/JDK_HOME/lib/tools.jar
但我用WINRAR打开 tools.jar,却没有发现 java.net、java.io等目录结构,
但我在jre的lib目录中发现一个rt.jar,这里面的目录结构就是完整的了。
问:
1、为什么tools.jar中没有完整的类库,javac还能顺利的编译?
2、java运行程序时,如何定位到rt.jar的?
 
这些是由ClassLoader自动载入的!
JVM在运行时会产生三个ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.其中,Bootstrap是用C++编写的,我们在Java中看不到它,是null。它用来加载核心类库,在JVM源代码中这样写得:
static const char classpathFormat[] =
"%/lib/rt.jar:"
"%/lib/i18n.jar:"
"%/lib/sunrsasign.jar:"
"%/lib/jsse.jar:"
"%/lib/jce.jar:"
"%/lib/charsets.jar:"
"%/classes";
为什么不需要在classpath中加载这些类?因为在JVM启动的时候就自动加载了!并且在运行过程中根本不能修改Bootstrap加载路径。
Extension ClassLoader用来加载扩展类,即/lib/ext中的类。
最后AppClassLoader才是加载Classpath的。
 
太好了,谢谢了!
又一个问题:tools.jar什么作用呢?
 
后退
顶部