java - 捕获并重新抛出完全相同的异常有什么意义吗?

标签 java exception

最近,我看到很多(商业)代码抛出和捕获完全相同的异常,类似于下面的代码:

public class Foo {
    public void bar() throws AnException {
        // do something (1)
        try {
            // do something (2) -- able to throw AnException
        } catch (AnException ex) {
            throw ex;
        }
        // do something (3)
    }
}

对比一下:

public class Foo {
    public void bar() throws AnException {
        // do something (1)
        // do something (2) -- able to throw AnException
        // do something (3)
    }
}

前者在行为、语义或其他方面是否真的完成了任何事情?它会对代码性能(时间和空间)产生任何影响还是有助于提高可读性?

附言这个问题与this question非常不同.

编辑:前者中的 catch block 除了重新抛出捕获的异常外没有做任何其他事情。

最佳答案

这违反了基本规则:

The code should catch only the exceptions that it knows how to handle.

Oracle 的指南建议每次抛出异常时,您都应该为捕获异常的代码提供一些有用的信息(请参阅 Effective Java Exceptions 的第 3 页)。捕获异常只是为了重新抛出它没有任何实际意义,因为没有为调用链中它上面的代码添加额外的信息,也没有由方法本身提取的信息。

关于java - 捕获并重新抛出完全相同的异常有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419928/

相关文章:

java - 在 Java 中使用自定义字体创建按钮会导致按钮形状奇怪

c# - 异常从非托管代码传播到托管代码?

java - Java中是否有原始类型的哈希码/堆地址?

java - 使用 Edittext 更改 Textview 的文本?

java - nextLine() 如何丢弃此代码中的输入?

linux - 无法在 Komodo Edit/IDE 7.0.2 中打开多个选项卡

c# - .NET 库的异常处理模式 - 处理、无人值守还是重新抛出?

java - 如何从程序中停止运行

java - 什么样的异常应该出现在assertEquals 的catch 中?

Java对象序列化,无法关闭ObjectOutputStream?