有一个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 将允许程序恢复
- 如果这是一个库,并且您想指示客户端这是一个主要问题并且无法处理,则抛出错误
总结一下
- 如果客户端无法恢复,则抛出错误
- 如果有恢复的方法,则抛出异常
- 最后要用的是 System.exit(1( 和代码没有客户端的时候。