为什么try/catch在某些情况下需要,而不是其他情况?
最近我一直在做一些纯粹的Java开发,并且我使用了一个外部库,它公开了少数几个方法,每个方法都有可能抛出一个Exception
。为什么try/catch在某些情况下需要,而不是其他情况?
Eclipse不会让我编译我的程序,除非我在try-catch
块中包装每个调用。到目前为止,没什么大不了的。
然后我注意到了一些东西,比如ArrayList.add()
,它会抛出IndexOutOfBoundsException
。我怎么能这样称呼这样的东西,而不需要把它包装在try..catch
? Obv,在这种特殊情况下,如果您每次都必须这样做,那将会令人难以置信,但在某些情况下如何以及为什么执行try-catch
,而不是其他情况?
Unchecked exceptions(的Error
或RuntimeException
子类)不需要try..catch
块,并且在没有try...catch
,该方法不需要申报自己是throws
(你可以,当然,还有一些考虑宣布throws
是一个很好的实践) 。另一方面,检查人确实需要try...catch
,或声明throws
。
我认为你的答案是明确的,但请提供一些例子,请.. – webcoder
IndexOutOfBoundsException
是未经检查例外,即它延伸RuntimeException
或Error
,或二者之一的子类,因此一个try/catch块是不必要的。从docs:
检查的异常受制于Catch或Specify Requirement。除了由Error,RuntimeException及其子类指示的异常外,所有异常均为检查异常。
相反,检查的异常需要try/catch
块,否则会导致编译器错误。
http://docs.oracle.com/javase/tutorial/essential/exceptions/ –
请!在发布问题之前在网上做一些调查! –
具体来说,http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html –