Java中捕获异常的顺序

Java中捕获异常的顺序,第1张

Java中捕获异常的顺序

顺序是 先匹配的,然后执行
(正如JLS清楚地解释的)。

如果第一个catch匹配到异常,则执行,否则,将尝试下一个,并不断重复直到匹配或不匹配。

因此,在捕获异常时,您总是要先捕获 最具体的
,然后再捕获最通用的(如RuntimeException或Exception)。例如,假设您想捕获String.charAt(index)方法抛出的
StringIndexOutOfBoundsException
,但是您的代码也可能抛出NullPointerException,这是捕获异常的方法:

String s = null;try {  s.charAt(10);} catch ( NullPointerExeption e ) {  System.out.println("null");  e.printStackTrace();} catch ( StringIndexOutOfBoundsException e ) {  System.out.println("String index error!");  e.printStackTrace();} catch ( RuntimeException e ) {  System.out.println("runtime exception!");  e.printStackTrace();}

因此,按照此顺序,我确保异常被正确捕获并且不会相互跳越,如果是 NullPointerException, 则进入第一个捕获,如果是
StringIndexOutOfBoundsException,
则进入第二个捕获,最后进入其他异常一个RuntimeException(或从它继承,如 IllegalArgumentException
)进入第三个捕获。

您的情况是正确的,因为IOException从Exception继承,并且RuntimeException也从Exception继承,因此它们不会彼此绊倒。

这也是一个编译错误,要先捕获一般异常,然后再捕获其后代之一,如下所示:

try {  // some pre here} catch ( Exception e) {  e.printStackTrace();} catch ( RuntimeException e ) { // this line will cause a compilation error because it would never be executed since the first catch would pick the exception  e.printStackTrace();}

因此,您应该先有孩子,然后再有父母例外。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4953251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存