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的返回类型。

  • 在C ++中, main必须返回int 。 通常,这意味着它必须有一个return语句,但是C ++标准main是一个特殊情况,暗示return 0; 作为结束,如果你不写一个。
  • 在Java中, 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)用于知道程序的执行情况是好还是坏。 执行良好时使用01, -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内部,我几乎从来没有在其他人的代码中看到它。

    链接地址: http://www.djcxy.com/p/96385.html

    上一篇: Java's System.exit(0); vs C++ return 0;

    下一篇: What is the difference between task and thread?