问题

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

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

        } catch (Exception e) {
            showException(e);
        }
    }

#1 热门回答(121 赞)

是的,有一个巨大的区别 - 后者吞下了例外(无可否认地显示它),而第一个将让它传播。 (我假设showException不会重新抛出它。)

因此,如果你调用第一个方法并且"执行某些操作"失败,则调用者将必须处理该异常。如果你调用第二种方法并且"做某事"失败,那么调用者根本不会看到异常......这通常是一件坏事,除非showException正确地处理异常,修复了错误,并且通常确保calculateArea已经实现了目的。

你将能够告诉它,因为你无法调用第一个方法,因为你可以用它来声明你的方法也可以抛出它。


#2 热门回答(14 赞)

是。声明throws Exception的版本将需要调用代码来处理异常,而显式处理异常的版本则不需要。

即,简单地说:

performCalculation();

与将处理异常的负担转移给调用者:

try {
    performCalculation();
catch (Exception e) {
    // handle exception
}

#3 热门回答(14 赞)

首先是onethrows Exception,所以来电者需要处理Exception。第二个在内部捕获和处理2332564657,因此调用者不必进行任何异常处理。


原文链接