4

我目前正在尝试运行我的第一个java脚本:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

我决定我会稍微研究一下Java。但是,我来自 JavaScript 和 PHP 之类的语言,它们不需要任何编译或任何类似的东西。

到目前为止,我认为我在命令提示符下正确编译它:

C:\Users\Shawn>"C:\Program Files\Java\jdk1.7.0_25\bin\javac.exe" "HelloWorld.java"

它添加了一个名为的文件:HelloWorld.class所以认为我做对了。

但是,现在当我尝试使用以下方法实际运行程序时:

C:\Users\Shawn>"C:\Program Files\Java\jdk1.7.0_25\bin\java.exe" "C:\Users\Shawn\HelloWorld.class"

我明白了,Error: Could not find or load main class C:\Users\Shawn\HelloWorld.class.

但是,如果我尝试使用相同的命令但javac.exe改为使用,我会得到:

javac: invalid flag: C:\Users\Shawn\HelloWorld.class
Usage: javac <options> <source files>
use -help for a list of possible options

为什么会这样?为什么我的程序没有正确执行?

4

3 回答 3

9

java命令采用的名称,而不是文件的名称。
然后它使用 Java 类加载器.class在当前目录或类路径中查找该类的文件。

当您通过时,它会查找包中HelloWorld.class命名的类 (即)classHelloWorld.
./HelloWorld/class.class

你需要通过HelloWorld

于 2013-07-21T03:00:26.290 回答
0

正如其他人指出的那样,参数需要只是类名,没有扩展名.class。但是,必须满足第二个要求:类文件必须位于classpath中。

通常不建议(尽管方便)将当前目录包含在全局类路径中,但您可以在命令行上覆盖它:

java -cp . HelloWorld

您还可以指定显式路径:

java -cp "C:\Users\Shawn" HelloWorld

如果您的 Java 程序使用其他类,请像这样包含全局类路径:

java -cp "%CLASSPATH%;." HelloWorld
于 2013-07-21T11:10:03.243 回答
0

有关详细信息,请参阅以下 javac文档。特别是关于交叉编译选项的部分。

于 2013-07-22T13:18:04.630 回答