是否有一种内置的方法来确定在finally块中是否刚刚从catch块中出来?我知道这可以很容易地用下面的变量来完成,但我只是好奇是否有一个标准的,内置的方法来做到这一点。
boolean bException = false;
try
{
dbf = new DBFunctions();
dbf.db_run_query(query2);
dbf.rs.next();
nMonth = dbf.rs.getInt("calquarter") * 3;
nYear = dbf.rs.getInt("calyear");
}
catch (SQLException sqle)
{
out.println(sqle.toString());
bException = true;
}
finally
{
dbf.closeConnection();
if (bException == true)
return;
}
更新:下面是closeConnection()方法的内容,它只是试图关闭所有的数据库对象:
public void closeConnection()
{
if (rs != null)
{
try { rs.close(); } catch (SQLException e) { ; }
rs = null;
}
if (stmt != null)
{
try { stmt.close(); } catch (SQLException e) { ; }
stmt = null;
}
if (con != null)
{
try { con.close(); } catch (SQLException e) { ; }
con = null;
}
}
据我所知没有。但是,在这种情况下,将return
简单地放在catch
块中可能会更好。finally
块仍会运行
没有标准的方法-语言不区分finally块作为正常或异常终止块的一部分调用。
我偶尔需要这种模式。与其在发生异常时设置标志,不如在正常代码的末尾设置。
boolean success = false;
try
{
doStuff();
success = true;
}
finally
{
if (!success)
{
// there was an exception
}
}
然后你的finally块知道它是从正常终止还是异常终止调用的。
编辑:在finally块中返回不被认为是好的做法,因为它吞噬了异常。这是隐式的,从代码(或语言规范)中并不清楚!如前所述,finally块将阻止SQLException的传播。如果这是您想要的,那么使用catch块执行此操作,使其显式。参见Java中的finally块返回
据我所知,没有办法做到这一点。首先,finally
块的目的是做一些无论是否有异常都必须做的事情。