Java的System.exit(0); vs C ++返回0;
当我们在学校学习C ++时,我们的教授会告诉我们写return 0;
在主函数的最后一行代码中,它被认为是一种很好的编程习惯。
在Java中,我意识到一些人写了System.exit(0);
在主要方法的最后一行。
但是,在C ++中,如果我使用exit(0);
我受到我的教授的惩罚,因为(在学校)进行程序编程,我们希望让程序一直到主要结束,让程序自然停止。
我的问题是:Java的System.exit(0);
类似于C ++的return 0;
? (或者它类似于C ++的exit(0)
)
在不需要的时候在java中使用System.exit(0)
是不好的做法(即:将它写在main方法的最后一行)?
Java的System.exit(0)
就像C ++的exit(0)
那样
后一点使其成为学术类型倾向于忽视的“非结构化”控制流构造。 (在这种情况下,他们有一个很好的理由:如果函数通过异常(或老式返回码)报告失败,则调用者可能会从错误中恢复,但exit
烧毁该桥。 ,有时候错误需要被视为致命的。)
在C ++中, 如果它在main
函数中 ,则return 0
相当于exit(0)
。 (在其他功能中,这并不意味着什么特别。)
这里C ++和Java之间的相关不同是main
的返回类型。
main
必须返回int
。 通常,这意味着它必须有一个return
语句,但是C ++标准main
是一个特殊情况,暗示return 0;
作为结束,如果你不写一个。 main
必须返回void
。 在C ++中,尽管在技术上是冗余的,但在main
编写return
语句是很常见的,因为它与程序中所有其他非void
函数的文体一致性。
在Java中,你不能从main
return
退出代码,因为它是一个void
函数。 所以,如果你想明确指定一个退出代码,你必须使用System.exit
。
用System.exit(0)
结束每一个Java main
函数并没有错,但是这样做只是不习惯,除非你有像
public static void main(String[] args) {
try {
//... do the work
System.exit(0);
} catch (Throwable t) {
//... report the error
System.exit(1);
}
}
在Java System.exit(0)中,System.exit(1),System.exit(-1)用于知道程序的执行情况是好还是坏。 执行良好时使用0
。 1, -1, whatever != 0
当发生某种错误时,您可以针对不同类型的错误使用不同的值。
你也可以这样说:
0表示一切正常
1意味着我期望出错的事情出错了
-1意味着我没想到的事情出错了
Java Doc说:
这个论点充当了一个状态代码; 按照惯例,非零状态码表示异常终止。
是Java的System.exit(0); 类似于C ++的return 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
}
当我们在学校学习C ++时,我们的教授会告诉我们写return 0;
在主函数的最后一行代码中,它被认为是一种很好的编程习惯。
这是有争议的。 他是否也告诉过你, return 0;
里面隐含的main
? 就我个人而言,我从不写冗余return 0;
main
内部,我几乎从来没有在其他人的代码中看到它。