重新抛出异常或调用 System.exit() 以结束程序.最佳实践是什么?



有一个try-catch块,在try块内可能会抛出异常。引发此异常时,继续执行是没有意义的。我也想将此异常的发生记录到日志中。我这样做,然后我想退出程序。

我应该打电话System.exit(1)还是只打电话给throw e?这甚至重要吗?这里的"最佳实践"是什么?

try {
...
} catch (Exception e) {
log.error("Wow this is severe! We are done here!", e);
//do I call "throw e" or "System.exit(1)" here?
}

没有最佳实践。

只有您的要求。

对于某些程序,正确的答案可能是立即退出JVM。

但是,是的,大多数时候,您更喜欢其中之一

  • 重新引发异常
  • 引发另一个异常
  • 不要扔任何东西

这是处理异常的三个"常见"选项。选择哪一个:同样取决于您的要求和您希望程序具有的行为。

最后一句话:System.exit()应该在非常小的"工具"应用程序中使用的东西。出现问题,您给出明确的错误消息,然后停止。在任何更大的应用程序中,应该只有一个层/组件决定拆除JVM及其所有内容。因为更大的应用程序并不意味着突然死亡。相反。

  • 如果你只是想重新抛出为什么要抓? 只是为了记录它
  • 还取决于调用此方法的方式和位置,这是一个库吗?
  • 在此之后没有其他事情发生? 在调用此的代码中
  • 如果无法处理问题,为什么不抛出错误?
  • System.exit(1( 终止 JVM, 而 Exception 将允许程序恢复
  • 如果这是一个库,并且您想指示客户端这是一个主要问题并且无法处理,则抛出错误

总结一下

  1. 如果客户端无法恢复,则抛出错误
  2. 如果有恢复的方法,则抛出异常
  3. 最后要用的是 System.exit(1( 和代码没有客户端的时候。

最新更新