关于java:为什么在某些情况下需要try / catch而不是其他情况?

Why is try/catch needed in some cases but not others?

本问题已经有最佳答案,请猛点这里访问。

我最近一直在做一些纯Java开发,我正在使用一个暴露少量方法的外部库,每个方法都有可能抛出Exception

除非我将每个调用包装在try-catch块中,否则Eclipse不会让我编译我的程序。 到目前为止,没什么大不了的。

然后我注意到一些东西,比如ArrayList.add(),抛出IndexOutOfBoundsException。 如何在不需要将其包装在try..catch中的情况下调用此类内容? Obv,在这种特殊情况下,如果每次都必须这样做,那将是非常恼人的,但是在某些情况下如何以及为什么try-catch强制实施,而不是其他情况?


未经检查的异常(ErrorRuntimeException的子类)不需要try..catch块,当没有try...catch时,该方法不需要声明自己是throws(当然,你可以和一些 考虑声明throws是一个好习惯)。 另一方面,已检查的确需要try...catch,或声明throws


IndexOutOfBoundsException是未经检查的异常,即它扩展RuntimeExceptionError,或者任何一个子类,因此不需要try / catch块。 来自文档:

Checked exceptions are subject to the Catch or Specify Requirement. All exceptions are checked exceptions, except for those indicated by Error, RuntimeException, and their subclasses.

相反,已检查的异常需要try/catch块,否则将导致编译器错误。