gpt4 book ai didi

java - java编译器是否优化了无法访问的异​​常捕获分支?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:38 25 4
gpt4 key购买 nike

为什么是代码

void methodThrowsException() /*throws  Exception*/{
try {
// throw new Exception();
} catch (Exception e) {
throw e;
}
}

编得好吗?AFAIK 编译器不会分析代码是否会抛出异常。这里很明显 throw e; 永远不会运行(由于注释 //throw new Exception();),但为什么编译器知道这一点?

最佳答案

javac 编译器确实没有做很多优化。但是简单死代码检测和优化仍然是可能的。

在您的示例中:编译器可以轻松检测到 try block 为空。空的 try block 不能抛出,所以所有 catch block 代码本质上都是死的

因此编译器可以进入并简单地将整个 try/catch 全部放到这里。然后就没有什么可以抛出异常了。

其中,当我们使用 javap 时,正是我们在字节码中发现的:

  void methodThrowsException();
Code:
0: return

是的,另一个答案是完全正确的:这只能以这种方式工作,因为您正在使用 Exception,更具体(已检查)的子类将导致编译器错误。

关于java - java编译器是否优化了无法访问的异​​常捕获分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54573353/

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