为什么Java规范只希望程序的主方法无效?
尽管返回类型不是方法签名的一部分,但 JVM 会查找确切的声明
public static void main(String[] args)
我的假设是,由于方法签名不包含“返回类型”,因此必须允许我更改返回类型。
但是,如果我将其更改为并返回一个值,例如0,JVM将无法执行程序并退出并出现错误public static int main(String[] args)
Error: Main method must return a value of type void in class TestData, please
define the main method as:
public static void main(String[] args)
为什么 Java 规范只希望 main 方法无效?当返回类型不是方法签名的一部分时,为什么会有此限制?
这个问题与为什么java中的main()无效不同?:这个问题是封闭的,因为它是基于意见的,而我正在寻找JVM调用此方法的代码位置/进程,以及迫使他们保持此方法无效的限制是什么。他们做出的设计决策是什么(以及背后的原因),以及在哪里记录下来。
我正在寻找事实,以便知道为什么这样做。请不要在没有通过问题细节的情况下将其标记为重复。
PS:退出,是另一回事。我更关心的是该计划的进入。此外,返回的值可能不是使用 JVM,将其限制为 void 限制了可扩展性。
到目前为止,我从这个问题中学到的是:Java规范已经明确地固定了返回类型,以避免混淆迁移程序员(C / CPP),他们可能期望这个值返回到操作系统,但由于JVM介于两者之间,这个值永远不会返回给OS。出于这个特殊目的(向操作系统返回值),他们提供了System.exit()方法。
对于那些建议返回类型是签名一部分的人 - 只需尝试在类中定义以下两种方法
public static void main(String[] a){
}
public static String main(String[] a){
}
您将收到编译错误,因为这两种方法的签名是相同的。