返回java中的main类型

时间:2010-03-14 03:00:41

标签: java

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

public static void main(String [] args)

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

由于

7 个答案:

答案 0 :(得分:28)

简短的回答是:因为这就是language specification所说的。

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

  

public static void exit(int status)

     

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

答案 1 :(得分:25)

你期待什么回来?

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

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

答案 2 :(得分:2)

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

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

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

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

一样

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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,但没有什么可以阻止您编写上述代码。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

合理的中间方式(在具有void签名,但也需要向OS返回值)之间似乎是:在main中为所有与错误对应的返回值抛出运行时异常,该异常中的适当消息。

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