【问题标题】:The relation between "precise rethrow" and final Exception“精确重投”与最终异常的关系
【发布时间】:2017-06-14 14:18:33
【问题描述】:

关于 java-7 功能“精确重新抛出”和final Exception ex 有很多问题,我找不到我的问题的明确答案。

“精确重新抛出”和 final Exception 之间的关系是什么?

public static void main(String args[]) throws OpenException, CloseException {
    boolean flag = true;
    try {
        if (flag){
            throw new OpenException();
        }
        else {
            throw new CloseException();
        }
    }
    catch (final Exception e) {
        System.out.println(e.getMessage());
        throw e;
    } 
}

如果我想使用“精确重新抛出”,是否必须使用 final 关键字?

catch (final Exception e) {
    System.out.println(e.getMessage());
    throw e;
} 

如果不是强制性的,我可以将 ex 引用重新分配给新的异常吗?

catch (Exception e) {
    System.out.println(e.getMessage());
    e=new AnotherException();
    throw e;
} 

【问题讨论】:

    标签: java exception-handling java-7


    【解决方案1】:

    不需要将异常参数(在您的示例中为e)声明为final 以获得精确的重新抛出语义。如果参数为effectively final,您还将获得精确的重新抛出。

    在您的第二个示例中,参数实际上不是最终的,因此您无法获得精确的重新抛出语义。

    (即使您分配给e 的异常与try 块中引发的原始异常的分配兼容,这也适用。)

    参考:JLS 11.2.2

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 2014-06-07
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多