是否有一种内置方法可以在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;
}
}
答案 0 :(得分:8)
据我所知。但是,在这种情况下,只需将return
放在catch
块内即可。 finally
块仍将运行。
答案 1 :(得分:4)
没有标准的方法 - 语言不区分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。
答案 2 :(得分:2)
据我所知,没有办法做到这一点。
首先,finally
阻止的目的是做一些必须要做的事情,无论是否有例外。