Java基础——try/catch/finally+return

当try、catch、finally中都有return时,程序是怎么执行的?
看下面的例子:

public static int test() {
        int i = 1;
        try {
            i = 2;
            System.out.println("try....");
            int j = i / 0;
            System.out.println(j);
            return ++i;
        } catch (Exception e) {
            i = 3;

            System.out.println("catch..");
            return i;
        }finally {
            i = 4;
            System.out.println("finally...");
            return i;
        }
    }

这是运行结果:

try....
catch..
finally...
4

说明最后程序还是从finally中的return返回。
这个问题还可以有很多种情形,下面来分析一下:
因为finally中的代码一定会执行,所以如果finally中有return时,一定从finally中返回,而且如果编写代码时如果在finally外面加return,程序还会报错。具体的分一下几种情形:

  1. try{}catch{}finally{}return;按顺序执行;
  2. try{}catch{}finally{return};按顺序执行;不能在finally外加return,会报错
  3. try{return1}catch{}finally{return2}:没有异常时,先执行到return1之前,再执行finally,从finally返回;有异常时,会执行catch块,最后还是从finally返回
  4. try{return}catch{}finally{}:先执行到return之前,任然还会执行finally,最后去执行return,return的是try中的值
  5. try{return1}catch{return2}finally{}:try中没有异常,从try中返回,有异常从catch中返回,finally总会执行;
    总结:1.finally总是会执行2.finally中有return就总是从finally返回;3.若finally中没有return,就按顺序执行,有异常就从catch中返回,没有异常就从try中返回。
    看下面两个最重要的情形:
public static int test() {
        int i = 1;
        try {
            i = 2;
            System.out.println("try....");
            int j = i / 0;
            System.out.println(j);
            return i;
        } catch (Exception e) {
            i = 3;
            System.out.println("catch..");
            return i;
        }finally {
            i = 4;
            System.out.println("finally...");
            //return i;
        }
    }

结果:因为有异常,所以从catch中返回返回的值还是catch中的3,虽然finally执行了,但是返回时是将3暂存在临时变量中的,最后从这个返回值中取。

try....
catch..
finally...
3
public static int test() {
        int i = 1;
        try {
            i = 2;
            System.out.println("try....");
            return i;
        } catch (Exception e) {
            i = 3;
            System.out.println("catch..");
            return i;
        }finally {
            i = 4;
            System.out.println("finally...");
        }
    }

结果:没有异常时,从try中返回,看出执行顺序是try-finally-return,最后return的值是try中的值。

try....
finally...
2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值