无法编译和执行java程序

时间:2017-02-25 18:35:50

标签: java cmd javac

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

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文件并给出一个完整的包名称,它只适用于源的整个路径,而执行程序时反之亦然?

1 个答案:

答案 0 :(得分:3)

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

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

然而,在第二次运行中,您传递C:/red/green/black/yellow/white/pink/Hello.class,这是编译文件的路径,但不是类的完全限定名称。

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

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

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