为什么在Java中的main()无效?

在C语言语言的情况下,我们声明main()方法返回一个int或float值(或void)。 是否有可能从Java中的main()声明一个非void返回types? 如果没有,那为什么不呢? 这是否意味着Java程序不会向操作系统返回任何值?

main()方法的确必须有一个void返回types。 从“执行 – 虚拟机启动”( §12.1.4 )的Java语言规范 :

方法main必须声明为publicstaticvoid 。 它必须接受一个单一的参数,这是一个string数组。

它继续描述程序在“执行 – 程序退出”( §12.8 )中何时退出:

当两件事情中的一件发生时,程序终止其所有活动并退出

  • 所有不是守护线程的线程都会终止。
  • 某些线程调用Runtime类或System类的exit方法,安全pipe理器不禁止退出操作。

换句话说,程序可以在main方法完成之前或之后退出; 因此从main返回的价值将是没有意义的。 如果您希望程序返回状态码,请调用以下方法之一(请注意,所有三个方法都不会正常返回):

  • System.exit(int status) – 相当于Runtime.getRuntime().exit(status)
  • Runtime.exit(int status) – 通过启动closures序列来终止当前正在运行的JVM(运行所有已注册的closures钩子 ,并在必要时运行未取消的终结器 )。 一旦完成,JVM将停止。
  • Runtime.halt(int status) – 强制终止当前运行的JVM。

其中, System.exit()是终止JVM的常规和最方便的方法。

关于同一主题的velocityreviews , 这是一个有趣的讨论:

突出:

顺便说一句,这在C和C ++中被认为是不好的风格,因为它是main的错误签名,而不是独立于编程语言的任何通用原因。 这是不是真的应该工作,但可能会在您的实施。

在Java中,主要返回void的原因是线程。 C和C ++在multithreading是众所周知的技术之前都被devise成语言,并且都在以后将线程嫁接到它们上面。 Java从一开始就被devise成一个multithreading环境,坦率地说,编写不使用多个线程的非平凡的Java应用程序是不寻常的。 所以程序从头到尾线性移动的想法有点过时了。

写的

http://www.designacourse.com任何地方训练任何人的最简单的方法。; Chris Smith – MindIQ公司首席软件开发人员/技术培训师

main方法void返回types的原因是,一旦main完成,并不一定意味着整个程序完成。 如果main产生新的线程,那么这些线程可以保持程序运行。 main的返回types在这一点上没什么意义。

例如,这在Swing应用程序中非常常见,其中main方法通常在Swing线程上启动GUI,然后main完成…但程序仍在运行。

你可以用System.exit()返回一个int。

返回除了整数以外的任何东西都没有多大意义,因为操作系统期望一个整数。 在没有任何返回的情况下,默认值是0,这意味着OK。 其他值通常用于指示错误或特殊情况。