try—catch—finally中,如果catch中return了,finally还会执行吗?

1.如果catch中return了,finally还会执行吗

有异常

public class Test {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/0;//有异常
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在哪?");
            return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
        }
    }
}

 结果:

会执行,执行顺序是try->catch->finally->catch中的return

扩展:

1.无异常,try中有return

public class Test {
    public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/1;
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在哪?");
            //return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
        }
        return null;
    }
}

结果:

 2.有异常,try中有return

public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/0;
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在catch");
            //return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
        }
        return null;
    }

结果:

3.有异常,catch中有return

public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/0;
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在catch");
            return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
        }
    }

结果:

 4.无异常,finally中有return

public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/1;
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在catch");
            return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
            return "finally";
        }
    }

结果:

5.有异常,finally中有return 

public static void main(String[] args) {
        System.out.println(test());
    }
    public static String test(){
        try{
            int i = 1/0;
            return "我在try里面";
        }catch (Exception e){
            System.out.println("我在catch");
            return "我在catch里面";
        }finally {
            System.out.println("我在finally里面");
            return "finally";
        }
    }

结果:

总结: 

1.一般情况下,finally里的代码一定会执行

2.如果catch中有return,也会在return之前,执行finally代码块

3.有异常:会立即中止try中的代码执行,无论try有无return,直接跳到catch中处理异常,然后执行finally

4.无异常:try中有return,等到要执行return之前,把finally中的代码执行完,才去执行return

5.如果finally中有return,无论有无异常,都不会执行try或catch中的return,会被finally中的return覆盖掉

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值