try catch finally return

try catch finally的本意是包裹住可能出问题的code,让接下来的code可以继续执行。
在理解这个意思之后,就很好理解这个现象:finally内加return编译器会报黄,且finally结束之后的所有code都会报:unreacheble code
原因是:不论之前所有code发生了什么,只要finally加入return,立即返回这个return值,注意不论前面发生什么,哪怕try或者catch中写了return
再说说try和catch
        try {
            int b = 1/0;
            return "123";
        } catch (Exception e) {
            e.printStackTrace();
            return "catch";
            // TODO: handle exception
        }finally {
//            return "123";
            System.out.println(3453);
            return "catch2";
        }
        return "last"
        
        
抛开finally 内部return,那么能够return的地方有三个,try内部,catch内部,结束finally块之后。
情况1:try和catch内部有return,此时如果try中无异常,会走try中的return,执行finally后返回,如果try中出现异常,则走catch中的return,执行finally后返回。所有情况都包括了,那么finally块之后的code是无论如何都不会被执行的。
情况2:try有,catch没有,此时必须加上最后的return "last",因为出现异常后,try中的return被跳过,此时没有返回值。
情况3:try没有,catch有,此时必须加上最后的return "last",因为如果没有出现异常,catch中的return被跳过,此时没有返回值。

然后就是如果返回值是引用类型,
情况1:如果在try/catch中return一个引用类型,在finally中能够修改这个引用类型,比如arraylist,能够加减内部的值。
情况2:如果是基本类型,finally中无法修改

原因是当遇到return语句时,会把当前返回值放到一个内存地址暂存,真正方法结束时,返回这个暂存值。注意,“值”无法修改,如果引用类型,这个地方方的是这个对象的引用地址的copy,基本类型直接cop

最后加入特殊的finally,就是finally会覆盖,return结束之后立即返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值