尝试/捕获与抛出异常
这些代码语句是否等效?它们之间有什么区别吗?
private void calculateArea() throws Exception {
....do something
}
private void calculateArea() {
try {
....do something
} catch (Exception e) {
showException(e);
}
}
这些代码语句是否等效?它们之间有什么区别吗?
private void calculateArea() throws Exception {
....do something
}
private void calculateArea() {
try {
....do something
} catch (Exception e) {
showException(e);
}
}
是的,有一个巨大的区别 - 后者吞下了异常(诚然,显示它),而第一个会让它传播。(我假设这不会重新删除它。showException
因此,如果您调用第一个方法并且“执行某些操作”失败,则调用方将不得不处理异常。如果调用第二个方法并且“执行某些操作”失败,则调用方根本不会看到异常...这通常是一件坏事,除非真正处理了异常,修复了任何错误,并且通常确保已经达到了目的。showException
calculateArea
您将能够分辨出这一点,因为如果不捕获自己或声明您的方法也可能抛出它,就无法调用第一个方法。Exception
它们在处理谎言的责任方面有所不同。第一个只是,所以它不处理它。调用该方法的代码需要处理 .第二个捕获并处理方法中的,因此在这种情况下,调用方不必执行任何异常处理,前提是它本身不会引发另一个异常。Exception
throws Exception
Exception
Exception
showException()