在 Java 中,finally 块“几乎总是会执行”,但确实有少数特殊情况可以跳过 finally,而且不能靠正常流程跳过。
下面分情况说明:
只要 try 块开始执行,finally 就会执行(无论是否异常、return、break、continue)。
try {
return 1;
} finally {
System.out.println("finally");
}
✅ 输出 finally 后,方法才返回。
System.exit())try {
System.exit(0);
} finally {
System.out.println("finally");
}
❌ finally 不会执行
原因:System.exit() 直接终止 JVM。
kill -9❌ finally 不会执行
Thread t = new Thread(() -> {
try {
while (true) {}
} finally {
System.out.println("finally");
}
});
t.setDaemon(true);
t.start();
当 JVM 退出时,守护线程可能直接被杀,finally 不保证执行。
stop()(已废弃,极危险)thread.stop();
❌ 可能直接跳过 finally
⚠️ 不推荐使用
public static int test() {
try {
return 1;
} finally {
return 2;
}
}
✅ 返回 2
⚠️ 非常不推荐这样写
Java 中 finally 不能被“正常跳过”,只有 JVM 退出或线程被强制终止时才会不执行。
✅ 一定会执行:
❌ 不会执行:
System.exit()如果你愿意,我也可以帮你分析某个具体代码场景是否会执行 finally。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。