gpt4 book ai didi

java - "precise rethrow"与最终异常的关系

转载 作者:行者123 更新时间:2023-12-01 20:22:12 25 4
gpt4 key购买 nike

关于 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;
}

最佳答案

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

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

(如果分配给 e 的异常与 try block 中抛出的原始异常兼容,这甚至适用。)

引用:JLS 11.2.2 .

关于java - "precise rethrow"与最终异常的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44547388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com