Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/java-try-catch-finally-block-execute-order.html

java 中 try catch finally 语句中同时包含 return 时的执行顺序

Java 笔记 Java 笔记


在 java 的 try ... catch ... finally 语句中,不管包含 return 语句与否,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 语句块;

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 语句块时;
SQL 中 WHERE 和 GROUP BY 的执行顺序如何? ...
Python中的异常可以通过try语句进行处理,try主要和except、else和finally一起使用。 ...
和try一起搭配使用,表示无论发生异常或否都要执行finally语句块,由于finally的这个特性,finally经常被用来做一些清理工作 ...
Python中return关键字是用来构成return语句的,return语句就是将结果返回到调用的地方,并把程序的控制权一起返回。 ...
Redis 基于 Java 的客户端非常多,其中比较常用的有 Jedis、lettuce 及 Redisson,此外还有 aredis、JD ...