7

我正在尝试深入了解 Java 编译。所以我把我的 IDE 放在一边,开始使用 MS-DOS 命令行......

我创建了一个简单的项目,如下面的树中所述:

示例应用程序

|____**src**

       |_____pack
               |______Sample.java
|____**classes**

这是 Sample.java 源代码:

public class Sample 
{

    private String s = new String("Hello, world");

    public Sample(){
          System.out.println(s);
    }
}

我只是想编译这个类,所以我使用了 javac 命令:

prompt\SampleApp\src>javac -d ..\classes -sourcepath . pack\Sample.java

一切正常,但我没想到,因为我CLASSPATH在编译我的 Sample.java 文件之前删除了我的环境变量。因此,由于编译器无法找到 java.lang.String 类文件,因此我期待编译器错误。

我读了这篇文章http://www.ibm.com/developerworks/java/library/j-classpath-windows/它帮助我理解了很多事情。文章作者说默认的类路径是当前工作目录。但我不明白为什么我的源代码编译没有错误。有人可以向我解释一下吗?

4

2 回答 2

6

因此,由于编译器无法找到 java.lang.String 类文件,因此我期待编译错误。

简短的回答是编译器知道在哪里可以找到所有标准 Java SE 库类,而无需您告诉它。

更长的答案是String在引导类路径中找到了该类。这是由命令隐式设置的,javac以引用 JDK 安装中的相关 JAR。该javac命令在查找常规类路径中的内容之前先搜索引导类路径。

于 2012-12-03T03:11:03.337 回答
5

类路径变量并没有按照你的想法做。引用 oracle 文档:

CLASSPATH 变量是告诉应用程序(包括 JDK 工具)在哪里查找用户类的一种方式。(属于 JRE、JDK 平台和扩展的类应通过其他方式定义,例如引导类路径或扩展目录。)

来源:http ://docs.oracle.com/javase/tutorial/essential/environment/paths.html

基本上,由于java.lang.*它是平台的一部分并随 JDK/JRE 一起交付,因此您不必告诉编译器在哪里寻找它们。

于 2012-12-03T03:05:20.603 回答