我目前正在尝试运行我的第一个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
为什么会这样?为什么我的程序没有正确执行?
答案 0 :(得分:9)
java
命令采用类的名称,而不是文件名。
然后,它使用Java类加载器在当前目录或类路径中查找该类的.class
文件。
当您通过HelloWorld.class
时,它会在包class
中查找名为HelloWorld.
的班级
(那将是./HelloWorld/class.class
)
您需要传递HelloWorld
。
答案 1 :(得分:0)
正如其他人指出的那样,论证必须只是类名,没有扩展名.class
。但是必须满足第二个要求:类文件必须位于classpath。
通常不建议(虽然方便)将当前目录包含在全局类路径中,但您可以在命令行上覆盖它:
java -cp . HelloWorld
您还可以指定显式路径:
java -cp "C:\Users\Shawn" HelloWorld
如果您的Java程序使用其他类,请包括如下所示的全局类路径:
java -cp "%CLASSPATH%;." HelloWorld
答案 2 :(得分:0)
有关详细信息,请参阅以下javac documentation。特别是关于交叉编译选项的部分。