博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中finally块到底是在return之前执行还是return之后执行?
阅读量:4101 次
发布时间:2019-05-25

本文共 1438 字,大约阅读时间需要 4 分钟。

网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有5种情况下finally语句是不会被执行的:

(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
(3)在finally语句块中发生了异常。
(4)程序所在的线程死亡。
(5)关闭CPU。
1.finally语句是在try的return语句执行之后,return返回之前执行

public class FinallyTest1 {
public static void main(String[] args) {
System.out.println(test1()); } public static int test1() {
int b = 20; try {
System.out.println("try block"); return b += 80; } catch (Exception e) {
System.out.println("catch block"); } finally {
System.out.println("finally block"); if (b > 25) {
System.out.println("b>25, b = " + b); } } return b; } }

运行结果是:

try blockfinally blockb>25, b = 100100

说明return语句已经执行了再去执行finally语句,不过并没有直接返回,而是等finally语句执行完了再返回结果。

2. finally块中的return语句会覆盖try块中的return返回。
3. 如果finally语句中没有return语句覆盖返回值,那么原来的返回值可能因为finally里的修改而改变也可能不变。
4. try块里的return语句在异常的情况下不会被执行,这样具体返回哪个看情况。
5. 当发生异常后,catch中的return执行情况与未发生异常时try中return的执行情况完全一样。
最后总结:finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。

转载地址:http://ulksi.baihongyu.com/

你可能感兴趣的文章
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>
杨辉三角
查看>>
冒泡排序法
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
16、Memento 备忘录模式
查看>>
Java基础篇(一)
查看>>
数据库
查看>>
mysql update与group by
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python猜拳游戏
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
python九九乘法表(详解)
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>