首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java finally阻止问题

Java finally阻止问题
EN

Stack Overflow用户
提问于 2011-04-16 23:20:46
回答 3查看 604关注 0票数 2

有没有一种内置的方法可以在finally块中确定您是否刚从catch块中出来?我知道使用下面这样的变量可以很容易地做到这一点,但我只是好奇是否有一种标准的内置方法来做到这一点。

代码语言:javascript
复制
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()方法的内容,该方法只是尝试关闭所有数据库对象:

代码语言:javascript
复制
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;
    }



}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-16 23:23:29

据我所知没有。但是,在这种情况下,简单地将return放在catch块中可能会更好。finally块仍将运行。

票数 8
EN

Stack Overflow用户

发布于 2011-04-16 23:27:50

没有标准的方法-语言不会区分作为块的正常或异常终止的一部分调用的finally块。

我偶尔会用到这个模式。不是在发生异常时设置标志,而是在正常代码的末尾设置它。

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2011-04-16 23:23:48

据我所知,没有办法做到这一点。首先,finally块的目的是做一些必须做的事情,不管有没有异常。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5687462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档