问题
这些代码语句是否相同?它们之间有什么区别吗?
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,因此调用者不必进行任何异常处理。