2015-11-01 88 views
0

我总是使用catch(Exception e){// whatever}但实际上是正确的吗?为什么我应该使用特定的异常,如果一般异常适用于一切?它以某种方式影响性能?Java何时捕获一般异常和特定异常

+2

没有性能差异,但在特定例外的情况下,您可以专门处理它们以从错误中恢复。如果你只是捕捉'Exception',那么你可以做的最好的事情就是打印它的堆栈跟踪。但是,例如,如果您正在构建ATM/Banking应用程序,则可以捕获“InsufficientFundsException”,并以与“InvalidPinException”不同的方式对待它。 –

+0

感谢您的提示:) – Welite

回答

4

我总是使用catch(Exception e){// whatever},但实际上是正确的吗?

不,这是违反良好的建议,以抓住最合适的特定例外。

为什么我应该使用特定的异常如果一般异常适用于一切?

因为您并不真正期待的异常可以被掩盖。 例如,执行某些数据库操作时,可能会发生 和SQLException,这可能是 ,您可以实现它的优雅处理。 如果ArrayIndexOutOfBoundsException被抛出, 这将是意想不到的,并且最有可能表示编程错误。 但是,如果您改为SQLException,您会发现Exception, ,那么您可能永远不会知道意外的ArrayIndexOutOfBoundsException被抛出。 优雅的清理可能也不适用于这种例外。

使用特定的异常还可以使代码更具可读性: 读者可以理解try-catch守护的代码中可能出现哪些错误。

与此相关的是,当你声明一个抛出异常的方法时,声明应该使用最适合抽象的异常。

它会以某种方式影响性能吗?

根本不是。