Java的System.exit(0);

Java's System.exit(0); vs C++ return 0;

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

在爪哇,我意识到有些人在主方法的最后一行写System.exit(0);

但是,在C++中,如果我使用EDCOX1,2,我会被我的教授惩罚,因为(在学校里)对于程序编程,我们希望让程序流到主体的末尾,让程序自然停止。

我的问题是:Java的EDOCX1 1是类似于C++的EDOCX1?0的吗?(或者它类似于C++的EDOCX1?5)

在不必要的情况下,在Java中使用EDCOX1第6条是不好的做法吗?(即:将它写入主方法的最后一行)?


Java的EDCOX1的8度类似于C++中的EDCOX1×23。

  • 它终止了进程
  • 它可以从程序中的任何地方调用。

后一点使其成为学术界人士往往不喜欢的"非结构化"控制流结构。(在这种情况下,它们有一个很好的理由:如果函数通过异常(或老式的返回代码)报告失败,调用方就有可能从错误中恢复过来,但exit会烧掉这座桥。当然,有时错误确实需要被视为致命的。)

在C++中,EDCOX1的25Ω等于EDCOX1,23,如果它在EDCOX1×1函数中。(在其他函数中,它并不意味着什么特殊的东西。)

C++和Java之间的不同之处在于EDCOX1的返回类型1。

  • 在C++中,EDCOX1〔1〕必须返回EDCOX1〔3〕。通常,这意味着它必须有一个EDCOX1×2Ω语句,但是C++标准使EDCOX1(1)成为一个特殊的情况,如果不写EDCOX1,则将EDCOX1作为9的结尾。
  • 在爪哇中,main必须返回EDCX1〔18〕。

在C++中,通常在EDOCX1×1中编写EDCOX1×2个语句,尽管它在技术上是冗余的,但与程序中所有其他非EDCOX1、18个函数的风格一致。

在爪哇中,EDOCX1和2不能从EDOCX1 1的出口代码中退出,因为它是EDCOX1×18的函数。因此,如果要显式地指定退出代码,则必须使用System.exit

用EDOCX1,8来结束每个Java EDCOX1 1函数都是错误的,但是除非你有一个类似的构造,否则它是不习惯的。

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
   try {
       //... do the work
       System.exit(0);
   } catch (Throwable t) {
       //... report the error
       System.exit(1);
   }
}


在Java系统.Exchange(0)中,System .EXIT(1),System .Exchange(-1)用于知道程序的执行是否是好的或坏的。执行良好时使用01, -1, whatever != 0当发生某些错误时,可以对不同类型的错误使用不同的值。

你也可以这样说:

0表示一切正常

1表示我希望出错的地方出错了。

-1表示我没想到会出问题的东西。

Java文档说明:

The argument serves as a status code; by convention, a nonzero status
code indicates abnormal termination.

Is Java's System.exit(0); similar to C++'s return 0; ?

是的,它们都很相似。

Is it bad practice to use System.exit(0) in java when it is
unnecessary

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

例如:

1
2
3
4
5
6
7
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
}


When we learn C++ in school, our professor will tell us to write return 0; at the last line of codes in the main function and it is considered as a good programming practice.

这是有争议的。他有没有告诉过你,return 0;隐含在main里面?就我个人而言,我从来没有在main中编写过多余的return 0;,而且我也几乎从未在其他人的代码中看到过它。


最初的操作系统Unix非常依赖使用和组合许多小程序的命令行脚本。程序的返回代码用于控制流。返回代码0表示一切正常,错误为非零。

因此,c int main(...)是一个直接映射,而return 0;在最后是合适的。一个出口就像抛出一个异常,绕过任何返回。它还禁止从另一个程序调用主程序。

在Java EDCOX1中,15是简化的,0是隐式的。System.exit(0);有同样的坏假设,即没有其他程序调用main。虽然一般来说,void反映了99%的使用率,但现在System.exit(...);对于非零错误代码是不可避免的。

这也必须被视为一个更一般的设计决策;C很大程度上依赖于函数的返回代码,这使得控制流变得困难或容易出错,因为Java引入了异常作为可能的强制控制流的使用,具有可自由选择的catch。现在,替代System.exit(13)的可能是throw new IllegalArgumentException("Unlucky");


对。Java的EDCOX1×0是一个直接的模拟,因为原型Java EDCOX1×1方法被定义为

1
2
public static void main(String[] args) {
}

因此,它实际上不可能是returnint(尽管它可以是return;)。在C++中,你可以使用EDCOX1×5,这也是等价的。