如果以下代码是从IDE或命令行运行,然后停止:
从不执行finally子句("最后"从未打印出来).
public class Test {
public static void main(String[] args) {
try {
while (true) {
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("Finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用Java 7规范:
如果try块的执行正常完成,则执行finally块,然后有一个选择:
任何见解?
编辑
哎呀,我的坏,有限的for循环导致finally子句被调用.我没有注意到我的单元测试中的痕迹.所以他们现在不是问题.
可能重复:
在Java中,最终会返回特朗普吗?
我在dao实现中遇到了一个java代码片段.它返回一个List,如下所示.
执行'return'语句后,finally块尝试关闭会话.这会有效吗?会议还会开放吗?
谢谢
标记
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();
}
}
Run Code Online (Sandbox Code Playgroud) 以下代码的输出是"Test Passed"; 谁能解释一下为什么?
public class Test {
public static void main(String args[]) {
System.out.println(new Test().print());
}
protected StringBuilder print() {
StringBuilder builder = new StringBuilder();
try {
builder.append("Test ");
return builder.append("Passed!!!");
} finally {
builder = null;
}
}
Run Code Online (Sandbox Code Playgroud) 为什么一个跳跃(break,continue,goto,return)不能从内部做出一个外部finally块(经由除外throw)?我想知道原因。谁能解释技术原因?
我们在代码中使用try catch块。我想问的是,使用finally块是一种好习惯。我还没看到多少最终会阻塞代码。这是不好的做法吗?