我有一段代码,它可以抛出3种类型的异常,这些异常都会延长运行时异常。
所以,如果我在不同的catch中分别捕获所有这3个异常,那么它会根据发生的异常进入不同的catch。
我只是怀疑,因为所有3个都是RuntimeExceptions,所以它可以只是第一次捕获,因为它也是一个运行时异常,但它不是抛出的异常。
答案 0 :(得分:4)
答案很简单:
换句话说:这完全取决于您的要求。当您需要进行不同的异常处理时,需要使用不同的catch块。
重点是,你要么有这个:
try {
...
} catch (IllegalArgumentException iae) {
...
} catch (NullPointerException ne) {
...
...
或强>
try {
...
} catch (RuntimeException r) {
...
}
...
(在那里捕捉像NPE这样的东西真的不推荐;我只是用它作为一些RuntimeException的例子)
答案 1 :(得分:1)
简短的回答:不。你的catch
区块会捕捉它应该捕获的内容。你告诉它抓住AwesomeRuntimeException
,它会抓住那些。只是因为两者都延伸了同一个类,它不会用它来捕捉DistastefulRuntimeException
。
就像你不能创建一个Car
个对象数组然后将Bike
个对象放入其中一样,只是因为它们都延伸Vehicle
。