为什么Java main()方法接受String args数组?

既然它可能是Java语言中使用最广泛的方法之一,为什么它必须接受一个字符串数组而没有它呢? 例如,我总是可以忍受:

public static void main() {} 

过度

 public static void main(String[] args) {} 

是否有更高的目的,只是能够接受命令行参数,特别是因为绝大多数Java程序是GUI驱动的,不需要通过命令行接收args?

即使是一个gui驱动的java应用程序也将从一些主要方法开始。 “更高目的”从未接受过命令行参数。

目的只是接受论点。 期。 每当你启动任何程序而不仅仅是Java时,你总是需要一些语法来传递参数

我同意它可以更灵活。 例如,在C#中,所有这些都是可接受的入口点:

 static void Main() static void Main(string[] args) static int Main() static int Main(string[] args) 

返回int的版本使用返回值作为进程的退出代码。 如果您不关心接收任何参数,您可以使用其中一个不带任何参数的版本。 启动程序时给出的任何参数都将被忽略。

所以是的,它可能更灵活 – 但它从来没有让我觉得这是Java中的一个重要问题。

程序总是采用命令行参数。 由程序员决定是否用于任何事情。

因此,实现一个没有字符串数组的main会导致更复杂的启动逻辑和可能令人困惑和错误的行为,因为更多的是没有编写单个参数声明的好处(在整个程序中!)

考虑到Java的整体冗长以及对像Eclipse这样的IDE中的样板代码的通用模板的支持,我无法看到真正存在问题的地方。

“这有更高的目的吗(..)”

是的:遗产。

“绝大多数”程序所做的事情并没有真正对需要做的事情产生太大影响。 仍有许多命令行程序由命令行args驱动。

许多GUI程序提供了接受命令行开关来控制其启动时的行为的工具。

我想这是因为许多Java程序至少需要一些参数。 就像C(Java的语法灵感,如果没有别的),Java考虑了将这些作为参数提供给main的最佳方法。

即使是GUI程序也经常采用命令行参数。 仅仅因为从它启动的shell通常不会要求这些参数(默认情况下),并不意味着它们不受支持。

还有很多java程序通过命令行接收args。 想想javac,ant,maven等