gpt4 book ai didi

java - 为什么我不能多次捕获异常?

转载 作者:行者123 更新时间:2023-11-29 07:45:39 24 4
gpt4 key购买 nike

JLS 8, 14.20 :

A try statement executes a block. If a value is thrown and the try statement has one or more catch clauses that can catch it, then control will be transferred to the first such catch clause.

看起来我可能有两个 catch 子句用于相同的异常类型。但是当我尝试这样做时,我会收到编译时错误。

public static void main (String[] args) throws java.lang.Exception
{
try{
} catch(RuntimeException ioe){
} catch(NumberFormatException e){ //Already caught
}
}

IDEONE

你能用 JLS 解释一下吗?

最佳答案

NumberFormatException 是 RuntimeException 的特化,因此您的 NumberFormatException 已经被第一条语句捕获。但是,您可以调换这两个 catch 子句的顺序;但请记住只有一个会被执行:

  • 如果异常具有此类型,则为 NumberFormatException 子句
  • 所有其他类型的 RuntimeException 的 RuntimeException 子句

至于为什么是这样的……嗯,这就是语言的设计方式。如果所有匹配的 catch block 都被执行,正确处理错误将变得更加困难。

关于java - 为什么我不能多次捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26116141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com