当前位置: 首页 > 面试题库 >

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

戚云
2023-03-14
问题内容

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

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

public static void main()
{
}

这不是面试问题。编程时才想到。


问题答案:

基本上,有四个答案:

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

  2. 设计的清洁度(也称为DRY原理)。当一个可以完成这项工作时,请不要指定两个入口点签名。显然可以。

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

通过仅识别void main(String[]),JLS避免了该问题1。

  1. 这类似于标准的C和C 入口点签名。(诚​​然,某些C / C 运行时也支持其他非标准入口点……但这并不是一件好事……IMO。)

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

FWIW,此维基百科页面以多种语言描述“主要”方法。

1-尽管您遇到了“问题”,但是Java新手可能会(错误地) 猜到
应该有多个入口点可以工作,尝试并获得惊喜。但是我认为任何设计都无法应付“凭猜测进行编程”。



 类似资料:
  • 问题内容: 为什么Java中的main方法总是需要参数?为什么我们每次都要写,而不是在使用任何参数时才写? 这样的方法会生成编译器错误。由于我们从不对main方法使用任何参数,因此应允许这样做。 这不是面试问题。编程时才想到。 问题答案: 基本上,有四个答案: 因为那是它的设计方式。是的,我知道这是一个循环的原因。但是关键是这就是它的样子,并且不会改变。因此,除非您打算设计自己的语言,否则这个问题

  • 问题内容: 是编写Java程序所需的主要方法吗? 这是我的代码: 它显示了编译时的错误: 问题答案: Java程序不需要main方法。正如其他人指出的那样,Web应用程序不使用main方法。 在独立应用程序中甚至不需要它。考虑 我编译并运行并获得以下结果: 对于独立应用程序,您必须具有 主要方法或 静态初始值设定项。 Main是首选。

  • 问题内容: 这些方法之间在功能上有区别吗? 编辑(从其他贡献者添加了此语法): 问题答案: 不,但第一个是首选样式。 编辑: 另一个选项是 此外,它还允许调用者使用varargs语法。

  • 问题内容: 我写了下面的代码 因此,当我运行它时,它可以正常运行并打印输出“ Hello”。 但是,如果JVM规范要求该main方法应该是公开的,因为“否则它就看不到main”,那么它也不适用于该类吗?如果JVM在未声明为public时“看不到” Hello.main(),它将如何看到类A本身。 除了“因为规范这样说”以外,对此还有什么解释吗? 并且,如果JVM能够看到所有类和方法,因为它本身就是

  • 问题内容: 当我只是尝试使用 Java 编写一些程序时,我尝试使用变量,我知道变量必须在声明时进行初始化,但是在main方法内部它接受了没有初始化的变量。我不知道是什么原因。任何人都可以告诉我原因。 谢谢 码: 问题答案: 对于 实例变量水平 最终变量只能初始化一次。 必须 在构造函数结束之前 初始化类级别的最终变量。 对于 本地(方法)级别 方法级别的最终变量只能初始化一次。 使用前* 必须先初

  • 问题内容: 我在内部类中有一个私有方法,我想使用SafeVarargs批注。但是,我需要使用静态方法或最终方法。为什么私有方法也需要最终确定?这不是多余的吗? 问题答案: 这是多余的,并且您提出了一个很好的观点。 我认为要求final或static的真正原因是强制不能重写该方法,因此子类不能以使@SafeVarargs注释对方法的定义无效的方式篡改数据。 但是,尽管这是多余的,但它并不是一个糟糕的