【发布时间】:2019-03-31 15:28:35
【问题描述】:
使用 JavaFX 时,我们会覆盖启动应用程序的方法 start。
@Override
public void start(Stage primaryStage ) {}
我发现当没有 main 方法时,java 编译器理解 start 是起点。 main 方法似乎是不必要的。 是否有理由仍在实施 main ?
是否还有功能性理由仍然实现 main 方法?
【问题讨论】:
使用 JavaFX 时,我们会覆盖启动应用程序的方法 start。
@Override
public void start(Stage primaryStage ) {}
我发现当没有 main 方法时,java 编译器理解 start 是起点。 main 方法似乎是不必要的。 是否有理由仍在实施 main ?
是否还有功能性理由仍然实现 main 方法?
【问题讨论】:
注意:我的回答假设 OpenJDK/OracleJDK。我不知道其他供应商是否有同样的行为。
其他人引用的文档侧重于不再存在的 JavaFX Packager 工具1。值得注意的是,该工具似乎不是必需的(至少对于 Java 10 和 11)。唯一需要的是存在 JavaFX 库并且指定的主类扩展 Application;那么无论代码是如何组装的,你都不需要main 方法。
是否还有功能上的原因仍然要实现 main 方法?
在普通的 JavaFX 应用程序中,我会说不。您想在main 中进行的几乎所有初始化都可以在Application.init 中进行。您还可以通过Application.getParameters 访问命令行参数。
附:最重要的问题,为什么编译器接受 start 作为起点。。这违背了我的编程神经症
有关 JavaFX(至少 10 和 11)应用程序的内部启动过程的详细信息,请参阅 my answer here。
此外,编译器不“接受 start 作为起点”。编译器只是编译代码并看到start——和main——与任何其他方法相同。它是搜索main 并调用它的运行时。也就是说,链接的答案涵盖了start(以及一般的 JavaFX 应用程序)如何得到特殊处理。
1. Java 11 中删除了打包工具。但是,有一个可能的替代品即将到来:jpackager。
【讨论】: