从命令行运行基本java程序是一个3个步骤:
- 编写代码:
public class HelloWorld {public static void main(String [] args){System.out.println(“Hello,World”); }}
-
由
javac HellWorld.java
编译,它将检查错误并生成HelloWorld.class
文件 . -
通过给出类名运行代码 - >
java HelloWorld
现在,我很想知道原因:
java HelloWorld
有效,但是当我们给出类文件的完整路径时,它会抛出一个错误
$ java HelloWorld.class
Error: Could not find or load main class HelloWorld.class
如果我们只给出类名为Vs classname with file-extension,那会有什么影响?
3 回答
在Java编程语言中,源文件(.java文件)被编译成具有.class扩展名的(虚拟)机器可读类文件 .
这是因为它就是这样 . 自Java 1.0以来,Sun / Oracle已经实现了
java
命令以便以这种方式工作,并且更改它将会造成巨大的破坏性 .正如Jon所说,该命令的参数是一个完全限定的类名,而不是文件名 . 实际上,很可能不存在名为
HelloWorld.class
的文件 . 它可以是JAR文件的成员......或者在某些情况下,几乎任何东西 .你给
java
二进制文件的参数isn 't meant to be a filename. It' s意味着是一个类名 . 所以特别是,如果你想在包foo.bar
中启动一个名为Baz
的类,你会运行:所以类似地,如果你试图运行
java HelloWorld.class
它's as if you'试图在包HelloWorld
中运行一个名为class
的类,这是不正确的 .基本上,您不应将参数视为文件名 - 您应将其视为完全限定的类名 . 哎呀文件系统上甚至可能没有一个简单的
Baz.class
文件 - 它可能隐藏在一个jar文件中 .