尝试/捕获与抛出异常

2022-08-31 08:32:33

这些代码语句是否等效?它们之间有什么区别吗?

private void calculateArea() throws Exception {
    ....do something
}

private void calculateArea() {
    try {
        ....do something
    } catch (Exception e) {
        showException(e);
    }
}

答案 1

是的,有一个巨大的区别 - 后者吞下了异常(诚然,显示它),而第一个会让它传播。(我假设这不会重新删除它。showException

因此,如果您调用第一个方法并且“执行某些操作”失败,则调用方将不得不处理异常。如果调用第二个方法并且“执行某些操作”失败,则调用方根本不会看到异常...这通常是一件坏事,除非真正处理了异常,修复了任何错误,并且通常确保已经达到了目的。showExceptioncalculateArea

您将能够分辨出这一点,因为如果不捕获自己声明您的方法也可能抛出它,就无法调用第一个方法。Exception


答案 2

它们在处理谎言的责任方面有所不同。第一个只是,所以它不处理它。调用该方法的代码需要处理 .第二个捕获并处理方法中的,因此在这种情况下,调用方不必执行任何异常处理,前提是它本身不会引发另一个异常。Exceptionthrows ExceptionExceptionExceptionshowException()