无法编译和执行 java 程序

Can't compile and execute java program

我有以下简化的文件结构:

C:/red/green/black/yellow/white/pink。我现在在文件夹 'black'.

中的 cmd 中

Hello.java文件中有 package yellow.white.pink。在文件夹 'pink' 中有一个 Hello.java 源文件。

首先我尝试编译文件:

javac -classpath . -encoding ISO-8859-1 yellow.white.pink.Hello.java

javac -cp . -encoding ISO-8859-1 yellow.white.pink.Hello.java

这两个给我报错:

File not found yellow.white.pink.Hello.java.

那我试试

javac -encoding ISO-8859-1 C:/red/green/black/yellow/white/pink/Hello.java

它编译得很好。

我做运行

java -classpath . yellow.white.pink.Hello 而且 运行 很好。 但在这种情况下

java C:/red/green/black/yellow/white/pink/Hello.class

不起作用 - 出现 Could not find or load main class 错误。

这是为什么?为什么我不能在根文件夹中编译 .java 文件并给出完整的包名称,它只适用于源的整个路径,而执行程序则相反?

java 命令将 class 的完全限定名称作为参数(包名称加上 class 名称)。

在这两种情况下,完全限定名称都必须是 yellow.white.pink.Hello,并且不应更改。

但是在你的第二个 运行 中你传递了 C:/red/green/black/yellow/white/pink/Hello.class 这是编译文件的路径但不是 class.

的完全限定名称

这两个 运行 的不同之处还在于 classpass 声明。在第一个 运行 中,它是当前目录的路径(可以作为 . 传递)。在第二个 运行 中根本没有指定。 Java 将此视为当前目录路径。

要使第二个示例工作,您必须指定 classpath 以及 class 名称。

java -classpath C:/red/green/black yellow.white.pink.Hello