【Java】finally 语句块不被执行的几种情况

在这里插入图片描述

执行顺序

try {  
    doSomething();  
    return success;  
} catch (Exception e) {   
    return failure;  
} finally {  
    System.out.println("this finally block always print out");
}

上述示例的语句执行顺序如下:

  1. 执行 try 语句块,如果未出现异常,则在执行 return 语句之前,执行 finally 语句块;
  2. 在运行 try 语句块时,若报错误,则跳入 catch 语句块中,然后在执行 catch 语句块中的 return 语句之前,执行 finally 语句块;

2.finally 语句块不被执行的几种情况

finally 语句块在 try 和 catch 语句块执行后,总是被执行,但是有如下几种情况下例外:

  1. 如果提前执行了 System.exit()
  2. 如果提前执行了 Runtime.getRuntime().halt(exitStatus)
  3. 若 JVM 提前崩溃了;
  4. 若在 try 或 catch 语句块中出现无限循环;
  5. 若系统强制停止了 JVM 进程,如在类 Unix 系统上执行了 kill -9 <pid>
  6. 若进程宿主机挂了,如断电了、硬件出现错误等等;
  7. 如果 finally 语句块准备被后台线程(daemon thread)调用,且没有其他非后台线程(non-daemon threads)可调用 finally 语句块时;
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付 39.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值