当前位置: 首页 > 知识库问答 >
问题:

Java捕获块,捕获异常不是最终的

寿阳华
2023-03-14

我正在查看Java SE7的新功能,目前我正在:

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

关于捕获多重功能,当我遇到这个语句时:

注意:如果一个捕捉块处理多个异常类型,那么捕捉参数是隐式最终的。在这个例子中,捕捉参数ex是最终的,因此您不能在捕捉块中给它赋值。

我从未注意到,在handleing捕获异常的经典案例中,捕获的异常不是最终的。

我只是想知道为什么这是一件好事?在我猜测重新引用或记录它的消息之前,本质上修改捕获的异常不是不明智的吗?是否应该由trowing机制来创建异常,以便它准确地表示它应该做的事情?

我从来没有见过一个异常被修改在捕捉块也许有人指出它的好处?

共有3个答案

司徒良哲
2023-03-14

我之所以能想到强制执行它是因为性能。一旦渔获量评估开始,在评估机制中有一个最终不变的值可以确保更快地评估所有渔获量。因为try-catch在所有java代码中都被广泛使用,所以最好采用最高性能的设计。

基于上述情况,它意味着影响大多数程序的性能改进。

宰宣
2023-03-14

我想不出一个令人信服的用例来修改经典get子句中的异常。然而,这并不意味着它应该被禁止。特别是考虑到您可以修改参数变量。如果您发现这令人担忧,您可以选择将异常变量声明为最终

另一方面,允许在多异常捕获中进行修改可能会引入真正奇怪且令人困惑的代码,例如:

  catch (IOException | NullPointerException ex) {
      ...
      ex = new IllegalArgumentException(...);
  }

我想这就是设计师在本例中添加限制时的想法。

但不管怎样,这就是Java语言的定义,也是我们必须面对的问题。辩论明显的不一致性没有多大意义。。。除非你打算设计和实现一种新的语言。

施鸿
2023-03-14

这与方法参数基本相同:

你通常不会修改它们,许多人都认为它们应该被视为final(是否真的在它们面前写final,是一个有争议的问题)。

但由于没有技术要求必须是最终版,因此该语言为您提供了选择的选项。

就我个人而言,我不知道有什么好的理由来修改catch块的异常引用。

 类似资料:
  • 问题内容: 我正在检查Java SE7的新功能,目前我正在: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch- multiple.html 关于捕获多个功能,当我遇到以下语句时: 注意:如果catch块处理多个异常类型,则catch参数隐式为final。在此示例中,catch参数ex是最终的,因此您不能在ca

  • 问题内容: 为什么Java中的某些异常未被捕获?这是代码由于没有处理的异常而完全失败。(Java版本1.4)。 我得到一个 但这有效 我懂了 我以为捕获异常会捕获所有异常?如何捕获Java中的所有异常? 问题答案: 因为某些异常不是源自-例如和。 基本上,类型层次结构是: 只能抛出派生类,因此,如果您抓住,那实际上就可以抓住一切。 ,以及任何异常,从获得 其他 比那些源自数作为 检查的异常 -他们

  • 我需要应用程序将错误写入位置。有没有我可以用Java异常处理做这件事?我已经在抛接IOerrors了,所以我不知道问题出在哪里……? 我正在从标准输入读取数据,并将其压缩并写入标准输出。 写入/dev/full不是引发异常...有没有关于如何引发异常的想法?

  • 为什么Java中的一些异常不被捕获?这是完全失败的代码,有一个未处理的异常。(Java版本1.4)。 我在线程“main”java中得到了一个 但这行得通 我在java中没有发现任何方法错误。lang.NoSuchMethodError: 我以为捕获异常会捕获所有异常?如何捕获java中的所有异常?

  • 请求(正文)

  • export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status