try finally return问题

Try finally return问题

一、Finally不能被执行的情况:

1、 程序没有执行到try代码块

2、 Try 或者catch中调用exit()方法让虚拟机关闭

二、当try和finally中同时含有return语句时,程序是如何执行的,看下面代码:

public class TryFinallyReturn {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        demo();

        }

    static int demo()

    {

        try {

            System.out.println("执行try代码块");

            return test1();

        }

        finally {

            System.out.println("执行finally代码块");

            return test2();

        }

    }

    static int test1()

    {

        System.out.println("执行try中的return语句");

        return 5;

    }

    static int test2()

    {

        System.out.println("执行finally代码块中的return语句");

        return 2;

    }

}

运行结果:

执行try代码块

执行try中的return语句

执行finally代码块

执行finally代码块中的return语句

 

从运行结果我们可以看到是先执行try中的return语句再执行finally语句的,这与我们以前所认识的不太一样:遇到return语句就直接退出函数;那么在try..finally语句中时如何处理的呢?

实际上是将try语句中return返回的结果存储到一个局部变量中,接着再去执行finally语句,finally语句执行完再将try语句中的值返回(注意:这样的前提是finally代码块中没有return语句,finally语句中有return会导致函数提前结束),看下面两段程序程序,与上面程序基本一致

一、 将demo()方法的返回值输出

 

 

结果输出为2,返回的值为finally代码块中的返回值,因为finally中的return使函数结束,所以不会回到try语句中去将值返回,再看将finally语句中return语句去掉的输出结果:

 

 

返回的结果是try语句中的返回值。

 

三、又存在这样一个问题:try中的return将返回结果存入到局部变量中,那在finally语句中能否对该返回值进行修改。

先看结论:如果是引用型变量的话,可以修改

                     如果是基本类型变量的话,不可修改

为什么是这种结果是由于值传递和引用传递引起的。

转载于:https://www.cnblogs.com/zhaolei1996/p/10581936.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值