main 函数不返回任何内容。为什么?

2022-09-05 00:09:18

对于 C/C++ main() 必须始终返回一个整数(零表示成功,非零表示失败)。当程序运行时,我可以理解这一点,它变成了一个进程,每个进程都应该有一个退出状态,我们通过执行echo $获得退出状态?从 shell 在过程结束后。

现在我不明白为什么main方法在Java中不返回任何内容?它是否与程序在JVM上运行并且JVM进程可以返回退出状态的事实有关?

请澄清。

谢谢,
罗杰


答案 1

当多线程已经是一件常见的事情时,java说(通过设计)“再见”,当“main”返回时程序就完成了。这就是没有返回值的原因。正如其他人所说,当您想使用返回码退出时,请使用。System.exit


答案 2

如果单线程 java 应用程序的 main 方法终止,则应用程序将以退出代码 0 终止。如果您需要另一个退出代码,也许是为了指示错误,您可以放置

System.exit(yourNumberHere);

代码中的任何位置(尤其是在 main 方法之外)。

对于多线程应用程序来说,这是不同的,在多线程应用程序中,您必须从外部使用 kill -9 内部的 System.exit 来停止 JVM。

下面是一个快速示例,其中 main 的终止不会停止应用程序(典型的服务或守护程序行为):

public static void main(String args[]) {  
  Thread iWillSurvive = new Thread(new Runnable() {
    public void run() {
      while(true) {
        // heat the CPU
      }
    }
  });
  iWillSurvive.start();
}

备注:当然,当线程的 run 方法(或主线程中的 main 方法)终止时,它将终止。在这种情况下,当所有线程都终止时,JVM将以退出代码0终止(这使我们回到最初的问题)。希望大家现在都快乐。


推荐