返回java中的main类型

我想知道为什么在java中只有void返回类型为main方法。

public static void main(String [] args) 

除了main方法之外,为什么没有其他返回类型。

谢谢

简短的回答是:因为这就是语言规范所说的。

在当今常用的操作系统(Windows和Unix系列)中,进程中唯一的“返回值”是退出状态 ,这是一个很小的数字(通常是8位)。 可以使用System.exit(int)方法从Java程序返回此值:

public static void exit(int status)

终止当前运行的Java虚拟机。 该参数用作状态代码; 按照惯例,非零状态代码表示exception终止。

你期待什么回来?

在C中,您通常返回一个int退出代码。 但是,在multithreading系统中,这没有多大意义。 通常,Java程序将启动许multithreading。 主线程通常会或多或少立即返回。

System.exit可用于退出特定的退出代码。

这似乎是一个随意的决定,可能考虑到并非所有操作系统都是unixy,因为它们允许程序返回退出代码。

可以使用来自mainint返回代码将C指定为C。 multithreading并不重要,因为只有一个线程最初启动main,它的返回值可能是JVM返回给OS的那个,无论其他线程何时返回以及它们做什么。

这是牵强附会但是如果有人构建了一个可以运行多个Java程序的JVM,每个程序都有自己的main ,那么它可以设计为返回最后一个main调用返回的值。

最合理的理由是JVM本身可能需要返回一个退出代码,原因是它自己的原因,但是,这个基本原理是由提供System.exit(int) ,它完全覆盖了JVM的返回代码。 鉴于此,没有理由同样允许main返回一个int ,就好像main的最后一件事是System.exit(n)

总而言之,听起来像是一个武断的决定。

首先,因为没有什么可以返回值。 主流操作系统(例如Windows,UNIX,Linux等)不允许命令“返回”值。 (虽然可以说,退出代码是一个返回值,但它被限制为一个整数,并且存在各种特定于操作系统的警告;例如,有多少位可以来自应用程序。)

其次,因为Java不允许重载仅在返回类型上有所不同的方法。

第三,正如@Tom指出的那样,如果exit codemain的返回值,则很难处理调用System.exit(rc)其他线程。

Java指定应用程序入口点必须是public static ,名为main ,返回void ,并将String[]作为参数。 这就是它的方式。

也就是说,您可以在技术上定义不符合这些标准的main方法,但它们不是有效的应用程序入口点

 public class MainMain { public static void main(String args[]) { // application entry point System.out.println(main()); } private static String main() { // just a method named main return "Hello world!"; } } 

您应该只为有效的Java应用程序入口点保留main ,但没有什么可以阻止您编写如上所述的代码。

因为您从JVM Hello.main运行main,所以我们无法将值返回给JVM。 它只是给出了运行时exception。

一个合理的中间路径(在有一个void签名,但也需要向OS返回一个值之间)然后似乎是:在main中为所有与错误对应的返回值抛出一个Runtimeexception,并带有相应的消息在那个例外中。

当然,这有助于区分操作系统级别的错误和非错误退出(例如,shell脚本等),但在许多情况下,这实际上只是需要的,并且可能是这些环境的最常见用途回报值; 如果此命令失败,则运行或不运行下一个命令。