为什么javac需要.java扩展而java不需要';不需要.class扩展

为什么javac需要.java扩展而java不需要';不需要.class扩展,java,Java,为什么javac在文件名中查找.java扩展名。 而java在其参数中不寻找.class?然后自动转到.class文件? 有什么原因吗?我认为这个决定背后没有很好的理由,除了.java文件是由程序员创建的,而.class文件是由编译器生成的。如果这个问题纯粹是为了教育目的,那么“仅仅因为它本来就是这样”的答案应该很好 除了.java文件是由程序员创建的,而.class文件是由编译器生成的之外,我认为这一决定背后没有很好的理由。如果这个问题纯粹是为了教育目的,那么“仅仅因为它本来就是这样”的答案应

为什么javac在文件名中查找.java扩展名。 而java在其参数中不寻找.class?然后自动转到.class文件?
有什么原因吗?

我认为这个决定背后没有很好的理由,除了
.java
文件是由程序员创建的,而
.class
文件是由编译器生成的。如果这个问题纯粹是为了教育目的,那么“仅仅因为它本来就是这样”的答案应该很好

除了
.java
文件是由程序员创建的,而
.class
文件是由编译器生成的之外,我认为这一决定背后没有很好的理由。如果这个问题纯粹是为了教育目的,那么“仅仅因为它本来就是这样”的答案应该很好

没有自动添加
.class
:您只需运行
java
指定使用哪个类作为主类。类加载和类路径的细节在不同的抽象级别上:可能没有
.class
文件,或者它在一个JAR中

顺便说一句,如果仔细观察,您会发现
java
并没有要求您提供路径:参数中没有斜杠(更糟糕的是,没有反斜杠),只有分隔包名的正确点。所以它从来不是一个“文件”


另一方面,
javac
确实可以处理文件,因此需要指定这些文件

没有自动添加
.class
:您只需运行
java
指定使用哪个类作为主类。类加载和类路径的细节在不同的抽象级别上:可能没有
.class
文件,或者它在一个JAR中

顺便说一句,如果仔细观察,您会发现
java
并没有要求您提供路径:参数中没有斜杠(更糟糕的是,没有反斜杠),只有分隔包名的正确点。所以它从来不是一个“文件”


另一方面,
javac
确实可以处理文件,因此需要指定这些文件

因为
javac
将Java(
.Java
)文件编译成类(
.class
)文件并
Java
执行生成的类。因为
javac
将Java(
.Java
)文件编译成类(
.class
)文件并
Java
执行生成的类。是的。刚才注意到java不寻找文件路径。刚才注意到java不查找文件路径。