Java最后阻塞问题



是否有一种内置的方法来确定在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块的目的是做一些无论是否有异常都必须做的事情。

相关内容

  • 没有找到相关文章

最新更新