System.exit(num) 还是从 main 抛出一个 RuntimeException?

2022-09-01 19:25:55

我有一个单线程应用程序,如果有问题,它应该将DOS错误级别设置为非零。是抛出一个 RuntimeException 更好,还是使用 System.exit(nonzero) 更好?我不需要堆栈跟踪,也不期望扩展/重用此应用程序。这两个选项之间有什么区别?


答案 1

不要引发异常,除非你真的有异常情况。 正是出于这个原因。使用它。System.exit(int)

编辑:我想我可能误读了你的问题。我以为你是在问,当你想正常退出JVM时,但表明某些事情不太正确,是抛出异常还是使用更好。System.exit

但是,如果发生的问题是 Java 异常已经指示的问题,那么可以不处理该异常。您不必捕获异常并调用 。System.exit

如果可以选择是引发自己的异常还是调用 ,请考虑错误条件是否可由调用您的方法的某些 Java 代码处理。如果错误直接发生在方法中,则可能永远不会有调用方来处理异常,因此您应该调用 。否则,通常最好引发异常 - 但不是 ,您可能应该使用适当表示所遇到的错误的异常类型。如有必要,请编写您自己的子类。System.exitmainSystem.exitRuntimeExceptionRuntimeException


答案 2

通常,在这种情况下,我会在我的main方法中处理所有异常,可能通过调用.这使您可以灵活地在何处/是否/如何处理异常情况,同时仍满足使用错误代码终止的需求。特别是,它使您可以控制返回代码以及您可能为用户生成的任何其他输出(错误消息,堆栈跟踪等)。如果在 main 中引发异常(或让异常转义),则会失去该控制。System.exit

总而言之,仅在顶级异常处理程序中调用:System.exit

static public void main() {
   try {
      runMyApp();
   } catch (Exception e) {
      System.exit(1);
   }
}

推荐