java 带文件扩展名的文件编译
java file compilation with file extension
当我们编译 java 程序时我们使用 javac file.java
命令但是当 运行ning 我们使用 java file
.
那么,为什么在编译时需要显式指定文件扩展名,而在我们 运行 java 程序中不需要?
因为当您 "run" java .class 编译文件时,您是在告诉 Java 应用程序启动器哪个 class 包含 main 方法。启动器启动 Java 运行环境并加载指定的 class.
如果写java MyClass
,那么main方法的class就是MyClass
。请注意,写 java MyClass.class
是错误的,因为 MyClass.class
不是 class.
的名称
当您使用 javac MyClass.java
编译时,您需要告诉 java 编译器扩展名,因为它是一个文件并且需要找到它。
So why it is necessary to explicitly specify file extension while compiling and not needed when we run the java program?
因为这是工具的实施方式:
javac
命令需要文件路径名
java
命令需要 Java class 个名称。
它们在 20 多年前就是这样实现的,向后兼容的需求已经超过了更改的需求1。
没有必要以这种方式设计工具。 (他们本可以采取不同的方式。)但是 为什么 他们这样设计的讨论是:
- 讨论(题外话)
- 基于观点(题外话),并且
- 没有实际意义。
1 - 有人可能会认为,如果工具的工作方式不同,对初学者来说会更好。但是,如果新手注意....并且不厌其烦地阅读文档 and/or 一个不错的教程 and/or 听 class.
当我们编译 java 程序时我们使用 javac file.java
命令但是当 运行ning 我们使用 java file
.
那么,为什么在编译时需要显式指定文件扩展名,而在我们 运行 java 程序中不需要?
因为当您 "run" java .class 编译文件时,您是在告诉 Java 应用程序启动器哪个 class 包含 main 方法。启动器启动 Java 运行环境并加载指定的 class.
如果写java MyClass
,那么main方法的class就是MyClass
。请注意,写 java MyClass.class
是错误的,因为 MyClass.class
不是 class.
当您使用 javac MyClass.java
编译时,您需要告诉 java 编译器扩展名,因为它是一个文件并且需要找到它。
So why it is necessary to explicitly specify file extension while compiling and not needed when we run the java program?
因为这是工具的实施方式:
javac
命令需要文件路径名java
命令需要 Java class 个名称。
它们在 20 多年前就是这样实现的,向后兼容的需求已经超过了更改的需求1。
没有必要以这种方式设计工具。 (他们本可以采取不同的方式。)但是 为什么 他们这样设计的讨论是:
- 讨论(题外话)
- 基于观点(题外话),并且
- 没有实际意义。
1 - 有人可能会认为,如果工具的工作方式不同,对初学者来说会更好。但是,如果新手注意....并且不厌其烦地阅读文档 and/or 一个不错的教程 and/or 听 class.