首页 > 解决方案 > 有什么简单的解释说明修改 Java catch 子句中的异常参数 ex 的充分理由吗?

问题描述

在阅读了 2 个源代码和其他 stackoverflow 线程之后,我仍然不明白为什么异常参数 ex 应该是可修改的(任何罕见的情况都可以作为示例答案),任何人都可以告诉一个好的场景/时间来修改 ex范围?Java语言规范中的含义是什么。说“有效地最终”?

uni-catch 子句意味着只有 1 个异常被捕获?

catch (IOException ex) 

与从 JAVE SE 1.7 开始的多捕获新功能类似

catch (IOException|SQLException ex)

阅读下面的帖子后变得更加困惑......任何人都可以对这个问题给出一个简单直接的解释。

uni-catch 的异常参数可能是有效的最终参数?

为什么 catch 参数隐式地是 final 的?

https://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html

注意:如果一个 catch 块处理多个异常类型,则 catch 参数是隐式 final 的。在此示例中,catch 参数 ex 是最终参数,因此您不能在 catch 块中为其分配任何值。

https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.4 ...以及多捕获子句的异常参数(第 14.20 节)。uni-catch 子句的异常参数永远不会隐式声明为 final,但实际上可能是 final。

标签: javaexceptionfinal

解决方案


关于修改捕获的异常的部分:

  1. 这实际上不是一种常见的做法。你不会发现很多人提倡它。
  2. 在某些情况下,您有自己的异常类,其中包含某些信息。也许该信息不因代码抛出而闻名。但是代码捕获有它,并将其添加到异常对象中。然后记录该异常,或使用“丰富”数据重新抛出它。

关于其他点:

  1. 您现在可以进行多次捕获的事实与此无关。但显然,多重捕获使得修改捕获的异常变得不那么有趣。
  2. 实际上 final 意味着编译器可以发现没有重新分配局部变量。该变量是最终的,但您没有将该关键字放在声明的前面。

推荐阅读