Java类路径相关

Java类路径相关,java,Java,我上了两节课 package xcom; public class A { } package xcom; public class B extends A { } 目录结构为: foo/test/xcom/A.java foo/test/xcom/B.java 我首先编译了A.java,然后删除了A.java文件,以便xcom现在包含 java和A.class,现在终于再次使用xcom作为我编译的当前目录 java使用命令“javacb.java”和B.java在同一目录中生成,如下

我上了两节课

package xcom;
public class A { }

package xcom;
public class B extends A {  }
目录结构为:

  • foo/test/xcom/A.java
  • foo/test/xcom/B.java
我首先编译了A.java,然后删除了A.java文件,以便xcom现在包含 java和A.class,现在终于再次使用xcom作为我编译的当前目录 java使用命令“javacb.java”和B.java在同一目录中生成,如下所示 这是我感到困惑的地方,因为默认情况下javac命令不搜索当前
目录类,那么为什么要编译这个程序。请帮助

javac
仅编译
B.java
。它不会重新编译
A.java
。相反,它使用编译版本:
A.class
,而
javac
希望它存在于
类路径中。由于
B.java
编译得很好,您的
CLASSPATH
显然设置正确。
A.java
的存在与此无关


这里有一些。

不管您是否设置它,它至少是隐式正确设置的,因为
B.java
编译得很好。可能它只是在启动命令提示符的同一目录中查找。我真的不能说,因为我不知道你的具体设置。你说它使用了一个.class,那么这是否意味着javac命令在默认情况下会搜索当前目录中的类文件。如果在执行
javac
时,当前工作目录是
../foo/test/xcom/
,那么是的。这与设置
类路径
并包含
元素时相同。我不确定,但我怀疑这是真的。这是关于和的文档。您查找的信息可能就在这里。“如果我们在命令行中给他任何其他类路径,那么它就无法在当前目录中找到类,而只能在指定的类路径中搜索”。如果将
放入类路径,那么它确实会搜索当前目录。也就是说,调用
javac
的目录。