java在try/finally中,try中的内容重要吗?
有什么功能上的区别吗
Connection c = null;
try {
c = getConnection();
c.doStuff();
} finally {
if (c!=null) c.close();
}
vs
Connection c = null;
c = getConnection();
c.doStuff();
try {
} finally {
if (c!=null) c.close();
}
vs
Connection c = null;
try {
c = getConnection();
} finally {
if (c!=null) c.close();
}
c.doStuff();
我觉得他们在任何情况下都会做同样的事情
# 1 楼答案
克雷格已经提到了未处理的异常问题,但我想说清楚。我编写了两个示例(最后一个示例很糟糕,因为在发生异常后,您可能正在处理断开的连接,不要这样做)。下面是一个抛出ArrayIndexOutOfBoundsException的简单示例:
以下是执行情况:
正如您在第一个版本中看到的,由于异常发生在try块的上下文中,所以注册了异常处理程序。在第二个版本中,没有注册的异常处理程序,并且调用了默认的异常处理程序(表示未捕获的异常)