java7中的精确重新抛出异常

时间:2016-08-18 09:50:23

标签: java-7

assylias很好地解释了final rethrow。 我将final添加到method3

public void method4() throws IOException {
    try {
        throw new IOException("1");
    } catch (final Exception e) {
        e = new IOException("2"); //does not compile
        throw e; //does not compile
    }
}

我将编译器设置为1.7。 method4有两个编译错误:

final exception can neither be reassigned nor throw precise exception. 

那么,显式最终异常仅用于防止修改?

1 个答案:

答案 0 :(得分:0)

catch块的{p> Exception隐式final并不意味着你无法重新分配它。如果您专门设置它final,那么编译器将不允许您修改该引用。要使throw编译异常实例必须为final有效 final,如链接答案中所述。

public void method4() throws IOException {
    try {
        throw new IOException("1");
    } catch (final Exception e) {
        e = new IOException("2");// You can not modify final reference
        throw e;
    }
}
  

所以显式最终异常仅用于防止修改?

确切地说,如果发生异常,final修饰符是多余的。始终建议throwlog例外。根据我的说法,任何异常的修改都是反模式。一般来说,即使在自定义异常的情况下,我们也不应该修改抛出的异常,除非并且直到你有充分的理由这样做。