try-catch-finally中return的执行情况

try-catch-finally中return的执行情况

try-catch-finally语句块中,finally语句块是比较特殊的一个,无论异常有没有被触发都会执行该语句块中的语句,如果在try、catch、finally三个语句块都加上return语句,如果不注意就用以搞不清楚,这里简单列举一下try-catch-finally语句的三种情况:

  • 三者之中都有return语句,则只执行finally中的return,且finally中的语句是在return之前完成的。
  • 若finally中没有return语句,触发了异常就执行catch中的return语句,没有触发就执行try中的语return。但是finally中的语句执行在return之前。
  • 若finally语句中发生错误或者异常,则会直接退出程序,自然也执行不到return语句了

考虑以下代码片的执行结果:

public class Test{
    public static void main(String[] args){
        String p1 = null;
        String p2 = "Hello";
        System.out.println(test(p1));
        System.out.println(test(p2));
    }

    public static int test(String s){
        try{
            System.out.println(s.toString());
            return 1;
        }catch(NullPointerException e){
            System.out.println("null");
            return 2;
        }finally{
            System.out.println("lalala");
            return 3;
        }
    }
}

执行结果为

null
lalala
3
Hello
lalala
3

将finally的return语句去除,如下:

public class Test{
    public static void main(String[] args){
        String p1 = null;
        String p2 = "Hello";
        System.out.println(test(p1));
        System.out.println(test(p2));
    }

    public static int test(String s){
        try{
            System.out.println(s.toString());
            return 1;
        }catch(NullPointerException e){
            System.out.println("null");
            return 2;
        }finally{
            System.out.println("lalala");
        }
    }
}

执行结果为

null
lalala
2
Hello
lalala
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值