为什么Java中的main方法总是需要参数?

2022-09-01 15:57:42

为什么Java中的main方法总是需要参数?为什么我们每次都要写,而不是在使用任何参数时只写它?String[] args

像这样的方法会生成编译器错误。由于我们从不对 main 方法使用任何参数,因此应该允许这样做。Main method not found

public static void main()
{
}

这不是面试问题。它只是在编程时浮现在我的脑海中。


答案 1

基本上,有四个答案:

  1. 因为这就是它的设计方式。是的,我知道这是一个循环的原因。但关键是,这就是它现在的样子,它不会改变。因此,除非你打算设计自己的语言,否则这个问题是没有意义的。

  2. 设计的清洁度(又名干燥原则)。当一个人可以完成工作时,不要指定两个入口点签名。显然,它可以。

  3. 语义简单。假设(假设)Java确实支持这两个点和入口点。如果一个类同时定义了这两种方法,会发生什么情况?这是一个错误吗?如果不是,当存在歧义时,哪一个优先?这是否令人困惑?void main(String[])void main()

    通过只识别,JLS避免了这个问题1void main(String[])

  4. 这类似于标准的 C 和C++入口点签名。(诚然,一些C / C++运行时也支持其他非标准入口点......但这并不是一件好事...国际海事组织。

这并不意味着以另一种方式做这件事是绝对错误的。例如,C#为您提供了替代签名,并通过要求开发人员以其他方式指定入口点来处理歧义问题。

FWIW,这个维基百科页面描述了多种语言的“主要”方法。


1 - 虽然你有一个“问题”,即刚接触Java的人可能会(错误地)猜测多个入口点应该工作,尝试一下,并得到一个惊喜。但我不认为任何设计都能应对“通过猜测进行编程”。


答案 2

因为运行应用程序的工具会查找具有特定签名的 ,因此它知道它正在调用正确的签名。Java具有方法重载功能,因此在查找方法时,必须指定一个相当完整的签名。当然,该工具可以做一些更复杂的事情(寻找特定的签名,并且没有找到它,寻找任何签名,如果它只找到一个签名,就调用它),但这不是Java设计师决定做的事情(主观上,FWIW,我认为这是最好的 - 保持简单)。javamainjavamain

您可以在 Java 语言规范第 12 章:执行中找到详细信息。请注意,从Java获得变量参数列表时起,可以通过两种不同的方式声明:main

public static void main(String[] args)
// or
public static void main(String... args)

推荐