我总是使用catch(Exception e){// whatever}但实际上是否正确?如果一般Exception适用于所有内容,为什么我应该使用特定的例外?它会以某种方式影响性能吗?
答案 0 :(得分:4)
我总是使用catch(Exception e){// whatever}但实际上是否正确?
没有。这违背了建议,以捕捉最合适的特定例外。
如果一般的Exception适用于所有内容,为什么要使用特定的异常?
因为您实际上并不期望的异常可以被掩盖。
例如,在执行某些数据库操作时,
可能会发生SQLException
,这是预期的,
并且您可以优雅地实施它。
如果ArrayIndexOutOfBoundsException
被抛出,
这将是意外的,并且很可能表示编程错误。
但如果改为SQLException
,你会抓住Exception
,
然后你可能永远不会知道意外的ArrayIndexOutOfBoundsException
被抛出。
优雅的清理也可能不适用于这种例外。
使用特定的异常也使代码更具可读性:
读者可以理解try-catch
守护的代码中可能出现的问题。
与此相关的是,当您声明一个抛出异常的方法时, 声明应该使用最适合抽象的异常。
它会以某种方式影响性能吗?
完全没有。