为什么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等