这可能是一个非常愚蠢的问题,但我试图理解为什么它很重要。为什么使用特定异常而不是仅使用Exception很重要。这是一个例子:
List<String> testList = new ArrayList<String>();
try {
testList.add(1, "String");
} catch (IndexOutOfBoundsException ex) {
ex.printStackTrace();
}
上面的例子有一个特殊的例外情况。为什么让IndexOutOFBoundsException
而不是仅使用Exception
很重要。我知道将Exception
与printStackTrace()
一起使用会向您显示实际引发的异常。
答案 0 :(得分:4)
这是一个很好的问题,但这也是一个很大的问题。在着名的书“ Effective Java ”中,Joshua Bloch将一整章专门用于Exception最佳实践。他的一个与此相关的建议是:
对可恢复条件使用已检查的异常,对编程错误使用运行时异常。
这与您发布的代码相关的原因是,通过捕获异常,您忽略了&#34;可恢复条件之间的区别&#34;和#34;编程错误&#34;。你在说,&#34;我不在乎什么是错的,我会去处理它。&#34;
虽然这种处理有时间和地点,但它通常处于应用程序的最高级别。例如,在未处理的异常情况下,许多Web应用程序框架向用户显示漂亮的错误页面。他们使用类似于catch Exception
的某种机制来实现此目的,以提供更好的用户体验并防止整个Web应用程序框架崩溃。
另一方面,如果一些粗心的开发人员在catch Exception
处于低级别代码的某个地方,然后发现了一个他并不意味着的例外,那么应用程序很可能会破坏其他方式,恶化用户体验和调试变得更加困难。