您如何决定,何时抛出异常以及何时捕获它?
答案 0 :(得分:10)
“效率”不应该成为一个问题。
当您遇到代码无法处理的情况时(您希望调用者做某事),您会抛出异常。
当你可以对它做一些事情时(你可能仍然想要重新抛出它或其他例外,如果你的调用者也应该对它做些什么)你会发现异常。
当您决定是否检查错误条件以避免后续异常或仅调用某些代码并在之后处理异常时,效率可能会很有用。这里的经验法则是异常应该只发生在异常情况下,因为它们会产生相当多的运行时开销(当它们实际被抛出时,catch块的纯粹存在没有成本)。
答案 1 :(得分:4)
这是一个备受争议的话题,很多人都有很强烈的意见。几个有用的链接
http://www.ibm.com/developerworks/java/library/j-jtp05254.html
http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
像Spring这样的大多数流行框架都相信只处理异常的理念,如果你可以对它们做些什么,那么它们会抛出更多的运行时异常。这是有道理的,因为抛出和捕获已检查的异常会添加不必要的代码。
还有一个问题。在您的应用程序中的某个时刻,尤其是更接近UI界面层(例如,针对您的Web应用程序的servlet),您需要确保正确处理各种异常并捕获它们。否则用户会看到500错误,这绝对不是一个理想的体验。在某些时候,您想让用户知道出了什么问题。如果它是一个运行时异常,可能更好的说法是,未知错误,记录它并用跟踪向系统管理员发送邮件。
所以是的,只处理您期望的异常,并且可以在整个应用程序中以建设性的方式处理。但是当您靠近应用程序的用户界面层时,请对此规则进行例外处理。