从命令行运行基本的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 文件扩展名,那会有什么影响?
答案 0 :(得分:6)
如果我们只给出带有文件扩展名的类名Vs classname,那会有什么不同?
您为java
二进制文件提供的参数不是文件名。它应该是一个类名。因此,特别是,如果您尝试在包Baz
中启动名为foo.bar
的类,则可以运行:
java foo.bar.Baz
同样地,如果您尝试运行java HelloWorld.class
,就好像您尝试在包class
中运行名为HelloWorld
的类一样,这是不正确的。
基本上,您不应将参数视为文件名 - 您应将其视为完全限定的类名。哎呀文件系统上可能没有简单的Baz.class
文件 - 它可能隐藏在一个jar文件中。
答案 1 :(得分:1)
如果我们只给出带有文件扩展名的类名Vs classname,那会有什么不同?
这是因为它就是这样。自Java 1.0以来,Sun / Oracle已经实现了java
命令以便以这种方式工作,并且更改它将会造成巨大的破坏性。
正如Jon所说,该命令的参数是一个完全限定的类名,而不是文件名。实际上,很可能不存在名为HelloWorld.class
的文件。它可能是JAR文件的成员......或者在某些情况下,几乎任何东西。
答案 2 :(得分:0)
在Java编程语言中,源文件(.java文件)被编译成具有.class扩展名的(虚拟)机器可读类文件