也许这个问题可能是将头发拆分,但是当我从命令行编译文件时,例如:
javac MyClass.java
然后,我无法通过说
来运行它java MyClass.class
我必须致电:
java MyClass
该符号的动机是什么?
,因为您在类路径上运行类,例如,该类可能包含在jar中。在这种情况下,您无法使用您的语法。
Java编译器需要一个编译单元;默认情况下(至少)Java源文件,其中整个类别及其依赖项中定义了整个类。
Java解释器(JVM)需要一个单个类,其中一个主要方法作为执行的入口 - 它必须从某个地方开始。
您必须向Sun(现在是Oracle)询问开发历史,但我确实想指出,对于仅使用Java而不是开发Java的人来说,Java Dosomething"比" java dosomething.class"
无法运行不是类的Java程序。因此,没有理由要求键入" .class"。您可能还可以从路径上的罐子中或直接调用一个类,但是它仍在实例化类(可能是清单中的"默认"类)。
,因为类的名称是 MyClass
而不是 MyClass.class
。并且运行java
时,您指定了类名称,而不是到达实际编译文件的路径。有关更深入的知识,我猜Sun&Oracle将不得不回答:)
想象您有一个名为package
的类,并且在一个名为package
的软件包中有一个名为Class
的类,
--CurrentFolder
--package
Class.class
package.class
因此,执行Java package.class
可能会导致编译器的不确定性!