主要功能不返回任何东西.为什么?

gam*_*ver 12 c c++ java jvm

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

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

请澄清.

谢谢,
罗杰

Kai*_*ann 17

设计多线程时已经很常见了,java(按照设计)说"再见"这个想法,当'main'返回程序时就完成了.这就是没有回报价值的原因.正如其他人所说System.exit当你想用退货码退出时使用.


And*_*s_D 14

如果单线程java应用程序的main方法终止,则应用程序将以退出代码0终止.如果您需要另一个退出代码,可能表示错误,您可以放置

System.exit(yourNumberHere);
Run Code Online (Sandbox Code Playgroud)

代码中的任何位置(特别是在主方法之外).

对于多线程应用程序,这是不同的,您必须从外部使用System.exit内部kill -9来停止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 Code Online (Sandbox Code Playgroud)

备注:当然,一个线程将在它的run方法(或主线程的主方法)终止时终止.在这种情况下,当所有线程都已终止时,JVM将以退出代码0终止(这将我们带回到初始问题).希望大家现在开心.


Joe*_*oey 7

Java就是System.exit(int)为了这个目的.

基本上,如果程序流到达main方法的末尾,Java程序将以退出代码0退出(粗略地说;它使用Swing和线程变得更奇怪,但这应该足够了).

如果您将呼叫固定在System.exit()某个地方(实际上Runtime.getRuntime().exit()是任何地方)或者是哪个System.exit()呼叫,则程序会立即结束并提前结束.

你可以想象它就像Java会System.exit(0)在main方法的最后隐式添加,但可能会有更微妙的差异.不过,我现在还没有关于JVM关闭的完整细节.