D:\>javac -verbose HelloWorld.java
[解析开始时间 HelloWorld.java]
[解析已完成时间 140ms]
[源文件的搜索路径: [., C:\Program Files\Java\jdk1.5.0_05\lib, D:\]]
[类文件的搜索路径: [C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar, C:\Progra
m Files\Java\jdk1.5.0_05\jre\lib\jsse.jar, C:\Program Files\Java\jdk1.5.0_05\jre
\lib\jce.jar, C:\Program Files\Java\jdk1.5.0_05\jre\lib\charsets.jar, C:\Program
 Files\Java\jdk1.5.0_05\jre\lib\ext\dnsns.jar, C:\Program Files\Java\jdk1.5.0_05
\jre\lib\ext\localedata.jar, C:\Program Files\Java\jdk1.5.0_05\jre\lib\ext\sunjc
e_provider.jar, C:\Program Files\Java\jdk1.5.0_05\jre\lib\ext\sunpkcs11.jar, .,
C:\Program Files\Java\jdk1.5.0_05\lib, D:\]]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/lang/Object.clas
s)]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/lang/String.clas
s)]
[正在检查 HelloWorld]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/lang/System.clas
s)]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/io/PrintStream.c
lass)]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/io/FilterOutputS
tream.class)]
[正在装入 C:\Program Files\Java\jdk1.5.0_05\jre\lib\rt.jar(java/io/OutputStream.
class)]
[已写入 HelloWorld.class]
[总时间 546ms]我想问的是,源文件搜索路径有必要吗?javac必须是绝对路径的。或者说我根本对这里的搜索源文件路径就理解错了。
还有类搜索路径为什么会比win 环境变量立的classpath里多了一些,这些我想应该是jdk自己加进去的吧。我就想它为什么不显示写在classpath里。我总觉得它应该是写在哪里了。
希望各位好心赐教!先谢过了!

解决方案 »

  1.   

     Java 启动器 java 将初始化 Java 虚拟机。虚拟机随即按以下顺序搜索和加载类:     自举类 - 构成 Java 平台的类,包括 rt.jar 和 i18n.jar 中的类。     扩展类 - 使用 Java 扩展机制的类。它们被捆绑为 .jar 文件,位于扩展目录中。     用户类 - 开发人员和第三方定义的类,不使用扩展机制。在命令行上使用 -classpath 选项(常用方法)或使用 CLASSPATH 环境变量可识别这些类的位置。 
      

  2.   

    对于这个问题我觉得我自己已经搞懂了。执行javac的时候[源文件的搜索路径: [., C:\Program Files\Java\jdk1.5.0_05\lib, D:\]] 的作用是寻找源文件,什么时候会寻找源文件呢?比如说你要编译的类A继承了类B可类B此时还没有被编译,那么在编译A前会去找到B并且把它编译。这里的源文件搜索路径就是和classpath属性的值是一样的。类文件的搜索路径 这个就如2楼所说。