企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### [精准的重新抛出异常](https://lingcoder.gitee.io/onjava8/#/book/15-Exceptions?id=%e7%b2%be%e5%87%86%e7%9a%84%e9%87%8d%e6%96%b0%e6%8a%9b%e5%87%ba%e5%bc%82%e5%b8%b8) 在 Java 7 之前,如果捕捉到一个异常,重新抛出的异常类型只能与原异常完全相同。这导致代码不精确,Java 7修复了这个问题。所以在 Java 7 之前,这无法编译: ~~~ class BaseException extends Exception {} class DerivedException extends BaseException {} public class PreciseRethrow { void catcher() throws DerivedException { try { throw new DerivedException(); } catch(BaseException e) { throw e; } } } ~~~ 因为 catch 捕获了一个 BaseException,编译器强迫你声明 catcher() 抛出 BaseException,即使它实际上抛出了更具体的 DerivedException。从 Java 7 开始,这段代码就可以编译,这是一个很小但很有用的修复。