Java 为什么要显式地声明CLASSPATH选项,而path可以从类文件中推导出来

Java 为什么要显式地声明CLASSPATH选项,而path可以从类文件中推导出来,java,classpath,Java,Classpath,我知道为什么必须为java命令提供类路径(SO中给出了许多很好的答案)。但我总是感到困惑,为什么默认情况下它不是从作为参数给出的.class文件路径推导出来的 e、 (这是一个愚蠢的例子…) 假设我在/home中,并且其中有/class/SomeClass.class文件 /home |_class |_SomeClass.class 如果我运行java-cp/home/class/SomeClass,程序(SomeClass)将成功运行 但是没有运行-cp选项(但是具有完整路径) j

我知道为什么必须为
java
命令提供类路径(SO中给出了许多很好的答案)。但我总是感到困惑,为什么默认情况下它不是从作为参数给出的.class文件路径推导出来的

e、 (这是一个愚蠢的例子…) 假设我在
/home
中,并且其中有
/class/SomeClass.class
文件

/home
 |_class
   |_SomeClass.class
如果我运行
java-cp/home/class/SomeClass
,程序(SomeClass)将成功运行

但是没有运行
-cp
选项(但是具有完整路径)

java./class/SomeClass

抛出异常
(java.lang.NoClassDefFoundError)
找不到主类…

这意味着,(除非我在同一个目录中)JVM无法知道在哪里找到SomeClass.class文件,即使我明确声明在
/class/
目录中查找它(在SomeClass之前加前缀)

在这种情况下,我觉得默认行为应该是考虑类路径所在的目录相同的类路径——通过路径计算。


是否有充分的理由总是使用
-cp

您是真的将.java文件混入其中,还是说您所说的.java文件所在的“.class”文件?请使用软件包再次尝试您的示例。没有软件包并不常见。@puce我编辑了我的问题。。。但我知道一个非常愚蠢的例子。我只想再次表明我的观点:试着用软件包来重新表述你的问题。也许事情在路上会变得更清楚。