TryCatch中Finally和Return的顺序

Finally和Return的顺序

首先finally中写return会覆盖try或者catch中的其他的return,而且finally中出现return是非常不健康的写法.(java9中会提示黄色感叹号)

try或者catch中没有return

1.try
2.catch
3.finally

catch中有return

1.try
2.catch
3.执行catch中的return,并将结果记录
<如果返回结果是基本数据类型,则记录字面量的值的拷贝,如果返回结果是引用数据类型,则记录其引用的值的拷贝>
4.执行finally
5.返回刚才记录的值

Java中,参数传递基本上就是赋值操作,所有的传递都是值传递,以下实例正好说明了这一点.

check1()中的finally没起作用是因为return的时候tempInt的值已经被return拷贝了一份了,而check2()中,return拷贝的是tempInt的地址(类似于0x1234).

public class CheckTemp {
    public static void main(String[] args) {
        System.out.println("整数类型返回"+check1());
        System.out.println("数组类型返回"+check2()[0]);
    }
    public static int check1() {    
        int tempInt = 0;
        try {
            tempInt=1/0;
        } catch (Exception e) {
            tempInt=1;
            return tempInt;
        }finally {
            tempInt=2;
        }
        return 0;//不会执行
    }
    public static int[] check2() {  
        int[] tempInt = {0};
        try {
            tempInt[0]=1/0;
        } catch (Exception e) {
            tempInt[0]=1;
            return tempInt;
        }finally {
            tempInt[0]=2;
        }
        return null;//不会执行
    }
}
结果
    整数类型返回1
    数组类型返回2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值