Java的System.exit(0); vs C++返回0;

use*_*460 16 c++ java return exit

当我们在学校学习C++时,我们的教授会告诉我们return 0;在主函数的最后一行代码中写一下,它被认为是一个很好的编程实践.

在Java中,我意识到有些人System.exit(0);在main方法的最后一行写道.

然而,在C++中,如果我使用exit(0);我受到我的教授的惩罚,因为(在学校)进行程序编程,我们应该让程序流到主要结束并让程序自然停止.

我的问题:Java是否System.exit(0);与C++相似return 0;?(或者它与C++类似exit(0))

System.exit(0)在不需要的时候在java中使用是不好的做法(即:在main方法的最后一行写它)?

dan*_*n04 16

Java的System.exit(0)是像C++的exit(0)

  • 它终止了这个过程
  • 它可以从程序的任何地方调用.

后一点使它成为学术类型倾向于皱眉的"非结构化"控制流构造.(在这种情况下,他们有一个很好的理由:如果一个函数通过异常(或老式的返回代码)报告失败,调用者可以从错误中恢复,但exit烧掉那个桥.当然,有时候错误确实需要被视为致命错误.)

在C++中,return 0等同于exit(0) 它在main函数中.(在其他功能中,它并不意味着什么特别的.)

这里C++和Java之间的相关差异是返回类型main.

  • 在C++中,main必须返回int.通常情况下,这意味着它必须有一个return语句,但是如果你不写一个语句,那么C++标准会产生main一个特殊情况,其中隐含return 0;为end.
  • 在Java中,main必须返回void.

在C++中,编写return语句是很常见的main,即使它在技术上是多余的,与程序中所有其他非void函数的风格一致.

在Java中,您不能return使用退出代码,main因为它是一个void函数.因此,如果要显式指定退出代码,则必须使用System.exit.

结束每个Java 函数并没有,但除非你有一个像这样的结构,否则这样做并不是惯用的mainSystem.exit(0)

public static void main(String[] args) {
   try {
       //... do the work
       System.exit(0);
   } catch (Throwable t) {
       //... report the error
       System.exit(1);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你的应用程序使用非守护程序线程的时间超过主线程的生命周期,那么以'exit`结束`main`方法是错误的**. (11认同)

Rah*_*thi 7

在Java System.exit(0),System.exit(1)中,System.exit(-1)用于知道程序的执行是好还是坏.0执行正常时使用.1, -1, whatever != 0发生某些错误时,您可以针对不同类型的错误使用不同的值.

你也可以这样说:

0 意味着一切都好

1 意味着我期待出错的东西出了问题

-1表示我没想到会出错的东西

Java文档说:

该参数用作状态代码; 按照惯例,非零状态代码表示异常终止.


是Java的System.exit(0); 类似于C++的返回0; ?

是的他们俩都很相似.

在不需要的时候在java中使用System.exit(0)是不好的做法

我不会说这是一个不好的做法,但是你应该知道何时使用它以及在哪里使用它.您可以使用它通过退出代码为命令行工具抛出错误,而不是抛出异常.System.exit(0)终止JVM所以你应该非常确定在哪里使用它.

一个例子:

try {  
    runTheWholeApplication();  
    System.exit(0);  // Signifying the normal end of your program
} catch (Throwable t) {  
    reportErrorSomehow(t);  
    System.exit(1);  // Signifying that there is an error
}
Run Code Online (Sandbox Code Playgroud)

  • @ user3437460是的.这是同一件事. (2认同)

Ell*_*sch 3

是的。Java 的方法System.exit(0);是直接类似的,因为原型 Javamain方法定义为

public static void main(String[] args) {
}
Run Code Online (Sandbox Code Playgroud)

所以它实际上不能returnint尽管它可以简单地return;)。在 C++ 中你可以exit(0);,这也是等效的。