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

时间:2013-05-20 14:10:00

标签: java exception

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

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

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

2 个答案:

答案 0 :(得分:5)

Unchecked exceptionsErrorRuntimeException的子类)不需要try..catch块,当没有try...catch时,该方法无需声明自身成为throws(当然,你可以考虑宣布throws是一个好习惯)。另一方面,已检查确实需要try...catch,或声明throws

答案 1 :(得分:3)

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

  

已检查的例外情况受Catch或Specify Requirement的约束。除Error,RuntimeException及其子类指示的异常外,所有异常都是经过检查的异常。

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