码农小屋 码农小屋
  • 首页
  • 文章
    • Python
    • 计算机基础
    • C语言
    • Java
    • 数据库
    • Linux
  • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板
  • 注册
    登录
立即登录
  • 首页
  • 博客中心
    • 文章
    • 资源
  • 随笔
  • 优秀软件
  • 24h新鲜事
  • 专题
  • 留言板

如果在try里面执行return,那么还会不会执行finally?

Mr Gu5月前

如题

我们都知道,finally在捕获异常的操作中,总是最后并且一定会执行的。那么,如果我在使用try finally的时候,如果try 给了一个return,那么还会不会执行finally呢?这里就来试一试。

finally的特性

  • Finally代码不管有没有异常发生它都会执行。
  • 没有异常发生的时候,在try内的代码执行结束后执行finally。
  • 如果发生了异常并且给catch捕获,则在执行完catch之后执行finally。
  • 如果有异常且未被捕获,则在异常被抛给上层之前执行。
  • 事实上,不用try catch也可以直接执行 try finally。

那么如果我在try 里面使用 return 会怎样呢?

测试过程

代码如下:

public class demo {
    public static void main(String[] args) {
        int result = fun();
        System.out.println("result = " + result);
    }
    
    public static int fun(){
        int a = 6;
        try{
            return a;
        }finally {
            a = 10;
            System.out.println("ret = " + a);
        }
    }
}

结果如下:

如果在try里面执行return,那么还会不会执行finally?-码农小屋

结论分析:

 测试的结果是,finally里面的代码依然会被执行。但是,虽然给a赋值了6。但返回的值最终还是10。所以,即使在try里面使用了return,也依然会执行finally。但是finally无法改变return的值。

因为在执行的过程中, try执行到return,会先把a的值保存在一个临时变量中,等到finally执行完毕之后才会返回。因此finally无法改变最终的返回结果。

新问题引入

那么,如果我在finally里面也执行一个return呢?结果会怎样?

public class demo {
    public static void main(String[] args) {
        int a = fun();
        System.out.println("a = " + a);
    }
    
	public static int fun(){
        int a = 6;
        try{
            return a;
        }finally {
            a = 10;
            return a;
        }
    }
}

结果如下:

如果在try里面执行return,那么还会不会执行finally?-码农小屋

结论分析:

这个时候try里面的return就会丢失。只会执行finally里面的return

0
分享
Mr Gu 管理员
文章 43评论 1
赞赏
Mr Gu
相关文章
  • 简述Java的三大特性——继承、封装、多态
  • Java编程,模拟抢红包程序
  • Java方法的重载和重写
  • Java笔记,Java的前世今生
评论 (0)
再想想
    沙发抢一发
Mr Gu
管理员
Better late than never.
43文章
1评论
51获赞
文章推荐
ZIP Pro 3 – 文件压缩分享加密管理套件
5月前
Uninstall Tool-专业的软件卸载工具
6月前
Speccy:优秀的硬件检测工具
6月前
CleanMyPC-专为 Windows打造的清理工具
6月前
Internet Downloader Manager-一款专业的Win下载工具
7月前
Wise Care 365-Windows 系统清理和加速工具
7月前
新鲜事
新Mac太牛:在电脑上运行iPhone、iPad的软件、游戏
5月前
苹果发布会总结:一个芯片,三款产品!苹果这把棋下得可真深
5月前
荣耀命运落定:救了自己,也救华为
5月前
发布会停不下来,苹果下月发布新Mac
6月前
iPhone 12 开启 5G 续航锐减,苹果回应
6月前
华为Mate40正式发布
6月前
更多
  • 专题
  • 文章
  • 友情链接
  • 留言板
Copyright © 2020-2021 码农小屋. 苏ICP备20033168号