这最终会阻止执行吗?

时间:2011-07-18 14:00:39

标签: java finally

  

可能重复:
  In Java, does return trump finally?

我在dao实现中遇到了一个java代码片段。它返回一个List,如下所示。

执行'return'语句后,finally块尝试关闭session。这会有效吗?会议还会开放吗?

感谢

标记

import org.hibernate.SessionFactory;
import org.hibernate.Criteria;
...
public List<Item> findItems(String name) {
    SessionFactory factory = HibernateUtil.getSessionFactory();
    Session session = factory.openSession();
    try{
        Criteria cri = session.createCriteria(Item.class);
        return (List<Item>) cri.add(Restrictions.eq("name", name)).list();
    } finally {
        session.close();
    }
}

4 个答案:

答案 0 :(得分:5)

如果你终止你的程序,例如System.exit(0)或强制退出等,则唯一一次不执行finally块。所以答案是:是的,你的会话将被关闭。

答案 1 :(得分:3)

阅读The finally Block,是的,finally块将在return之后执行。

答案 2 :(得分:2)

是的,finally块将始终执行(*)。

finally块将在return之后执行,因为在执行finally块之前将计算返回值并记住

(*)警告:除非有什么原因导致JVM完全结束操作。

答案 3 :(得分:0)

是的,finally块将在return语句之后但在值完全返回到方法之前执行。