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

2022-09-02 20:09:22

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

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

然而,在C++,如果我使用我会受到教授的惩罚,因为(在学校)对于程序化编程,我们期望让程序流到main的末尾,让程序自然停止。exit(0);

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

当没有必要时,在java中使用它是不好的做法吗(即:在main方法的最后一行中编写它)?System.exit(0)


答案 1

Java就像C++一样System.exit(0)exit(0)

  • 它终止进程
  • 可以从程序中的任何位置调用它。

后一点使其成为学术类型倾向于不赞成的“非结构化”控制流结构。(在这种情况下,他们有一个很好的理由:如果一个函数通过异常(或老式的返回代码)报告失败,则调用方可以从错误中恢复,但会烧毁该桥。当然,有时错误确实需要被视为致命错误。exit

在C++中,等效于它是否在 main 函数中。(在其他函数中,这并不意味着任何特殊之处。return 0exit(0)

C++和Java之间的相关区别在于 的返回类型。main

  • 在C++中,必须返回 。通常,这意味着它必须有一个语句,但是C++标准会设置一个特殊情况,如果你不写一个语句,则以隐含为结尾。mainintreturnmainreturn 0;
  • 在 Java 中,必须返回 。mainvoid

在 C++ 中,通常使用 编写语句,即使它在技术上是多余的,以便与程序中的所有其他非函数保持样式一致。returnmainvoid

在Java中,你不能退出代码,因为它是一个函数。因此,如果要显式指定退出代码,则必须使用 .returnmainvoidSystem.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);
   }
}

答案 2

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

你也可以这样说:

0 意味着一切正常

1 表示我期望出错的事情出错了

-1表示我没想到会出错的事情

Java文档说:

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


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

是的,它们都很相似。

在 java 中使用 System.exit(0) 是不是一种不好的做法,因为没有必要

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

举个例子:

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
}