【发布时间】:2014-11-24 19:18:47
【问题描述】:
try 语句执行一个块。如果抛出一个值并且尝试 语句有一个或多个可以捕获它的 catch 子句,然后 控制将转移到第一个这样的catch子句。
看起来我可能有两个用于相同异常类型的 catch 子句。但是当我尝试这个时,我会收到编译时错误。
public static void main (String[] args) throws java.lang.Exception
{
try{
} catch(RuntimeException ioe){
} catch(NumberFormatException e){ //Already caught
}
}
你能用 JLS 解释一下吗?
【问题讨论】:
-
你可能有两个,但
It is a compile-time error if a union of types contains two alternatives Di and Dj (i ≠ j) where Di is a subtype of Dj (§4.10.2).。如果必须,请放置一个 try-catch(NFE) 并重新抛出它,然后在其周围放置一个 try-catch(RE) -
在同一个 try 语句中多次捕获同一个异常有什么意义?
unreachable catch block ...上的编译错误非常明显。 -
@Philipp 我这里有联合类型吗?
-
JLS 11.2.3: 如果 catch 子句可以捕获异常类 E1 并且紧接的 try 语句的前面的 catch 子句可以捕获 E1 或E1.
-
最后,报价正是我想要的。 @Seelenvirtuose 谢谢。
标签: java exception language-lawyer