Why is try/catch needed in some cases but not others?
我最近一直在做一些纯Java开发,我正在使用一个暴露少量方法的外部库,每个方法都有可能抛出Exception。
除非我将每个调用包装在try-catch块中,否则Eclipse不会让我编译我的程序。 到目前为止,没什么大不了的。
然后我注意到一些东西,比如ArrayList.add(),抛出IndexOutOfBoundsException。 如何在不需要将其包装在try..catch中的情况下调用此类内容? Obv,在这种特殊情况下,如果每次都必须这样做,那将是非常恼人的,但是在某些情况下如何以及为什么try-catch强制实施,而不是其他情况?
-
docs.oracle.com/javase/tutorial/essential/exceptions
-
请! 在发布问题之前在网上做一些研究!
-
具体来说,docs.oracle.com/javase/tutorial/essential/exceptions/…
-
看看java-checked-vs-unchecked-exception-explanation或why-are-exceptions-named-checked-and-unchecked
-
感谢所有的链接家伙 - 我没有意识到java有2种类型的例外。 我想当你熟悉这门语言时,这是一个非常微不足道的事情
未经检查的异常(Error或RuntimeException的子类)不需要try..catch块,当没有try...catch时,该方法不需要声明自己是throws(当然,你可以和一些 考虑声明throws是一个好习惯)。 另一方面,已检查的确需要try...catch,或声明throws。
IndexOutOfBoundsException是未经检查的异常,即它扩展RuntimeException或Error,或者任何一个子类,因此不需要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块,否则将导致编译器错误。