温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Finally最终会执行吗

发布时间:2026-11-10 05:23:38 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,finally 块“通常”一定会执行,但不是 100% 绝对会执行。下面分情况说明。


一、finally 一定会执行的情况 ✅

只要程序进入了 try 块,并且JVM 没有被强制终止,finally 就会执行。

示例 1:有异常也会执行

try {
    int a = 1 / 0;
} catch (Exception e) {
    System.out.println("catch");
} finally {
    System.out.println("finally");
}

输出:

catch
finally

示例 2:try 中 return 也会执行

public static int test() {
    try {
        return 1;
    } finally {
        System.out.println("finally");
    }
}

输出:

finally

(然后返回 1)


二、finally 不会执行的情况 ❌

1️⃣ 调用 System.exit()

try {
    System.exit(0);
} finally {
    System.out.println("finally");
}

❌ finally 不会执行


2️⃣ JVM 崩溃 / 断电 / 强制杀死进程

  • 操作系统 kill -9
  • 机器断电
  • JVM 崩溃(如 native 代码错误)

❌ finally 不会执行


3️⃣ 程序还没进入 try 块

System.out.println("before");
System.exit(0);

try {
    // 不会进来
} finally {
    System.out.println("finally");
}

❌ finally 不会执行


三、finally 和 return 的执行顺序(重点)

public static int test() {
    try {
        return 1;
    } finally {
        System.out.println("finally");
    }
}

执行顺序:

  1. try 中计算 return 值(1)
  2. 执行 finally
  3. 真正 return

四、finally 的典型用途 ✅

  • 释放资源
  • 关闭流
  • 关闭数据库连接
  • 解锁
Connection conn = null;
try {
    conn = getConnection();
} finally {
    if (conn != null) conn.close();
}

⚠️ 现在更推荐 try-with-resources


五、一句话总结 ✅

finally 在“正常 JVM 运行且进入 try 块”时一定会执行,但不是绝对执行(如 System.exit / JVM 崩溃不会执行)。

如果你愿意,我也可以帮你画执行流程图或者用面试题角度来讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手