有没有一种内置的方法可以在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;
}
}发布于 2011-04-16 23:23:29
据我所知没有。但是,在这种情况下,简单地将return放在catch块中可能会更好。finally块仍将运行。
发布于 2011-04-16 23:27:50
没有标准的方法-语言不会区分作为块的正常或异常终止的一部分调用的finally块。
我偶尔会用到这个模式。不是在发生异常时设置标志,而是在正常代码的末尾设置它。
boolean success = false;
try
{
doStuff();
success = true;
}
finally
{
if (!success)
{
// there was an exception
}
}这样你的finally代码块就会知道它是从正常的还是异常的终止中调用的。
编辑:在finally块中返回被认为不是好的做法,因为它会吞噬异常。这是隐含的,从代码(或语言规范)中看不清楚!如上所述,您的finally块将停止传播SQLException。如果这是您想要的,那么可以使用catch块来显式地执行此操作。参见Returning from a finally block in Java。
发布于 2011-04-16 23:23:48
据我所知,没有办法做到这一点。首先,finally块的目的是做一些必须做的事情,不管有没有异常。
https://stackoverflow.com/questions/5687462
复制相似问题