今天我遇到了一个小问题,我有一段这样的代码,这让我有点不舒服......
try{
//stuff...
} finally {
//finally stuff
}
我想知道这种实现在try
中何时发生异常并且被重新抛给处理它的调用者方面是一个好的做法。这相当于下面的代码吗?
try{
//code....
} catch (Exception e) {
//handling...
} finally {
//finishing up
}
答案 0 :(得分:5)
它不等同,因为你已经给出的原因:在第一种情况下仍然抛出异常。并且可能有原因,您确切地想要这样的行为:关闭资源,例如finally
中的流阻塞,但将异常抛出封闭方法,以便在其他位置处理它。
顺便说一句,您还可以“滥用”try
- finally
构造,以防万一没有异常:
private StringBuilder buffer = new StringBuilder();
private String getBuffer() {
try {
// return current String content of the buffer
return buffer.toString();
} finally {
// assign a new StringBuilder, before method returns
buffer = new StringBuilder();
}
}
答案 1 :(得分:2)
不完全一样,没有try/finally
的{{1}}块等同于
catch
你只是在不处理它的情况下抛出异常。省略try {
// ...
} catch (Exception e) {
throw;
} finally {
// finishing up
}
块是好的,如果这是你打算做的,它会提高代码的可读性。