try-catch-finally-return所有情况结果

我们经常使用try-catch处理异常,其中也会包含return的情况,但是return在不同的程序体中的执行与否以及执行结果是怎样的我们很多人都不是很清楚。本文将一文搞定所有情况,帮助大家理清return的各种情况。若有遗漏之处欢迎评论区补充,大家一起学习|●´∀`|σ

仅try中return

代码

public class ReturnLab1 {

    public static void main(String[] args) {
        System.out.println(function1());
        System.out.println("==============");
        System.out.println(function2());
        System.out.println("==============");
        System.out.println(function4());
        System.out.println("==============");
        System.out.println(function5().get("key1"));
    }

    private static int function1() {
        int num = 100;
        try {
            System.out.println("try print");
            return num += 10;
        } catch (Exception e) {
            System.out.println("catch print");
        } finally {
            System.out.println("finally print");
            if (num > 100) {
                System.out.println("num > 100, num = " + num);
            }
        }
        return num;
    }

    private static String function2() {
        try {
            System.out.println("try print");
            return function3();
        } finally {
            System.out.println("finally print");
        }
    }

    private static String function3() {
        System.out.println("function3 print");
        return "function3 returnValue";
    }

    // try中return num,num返回之前在finally中改变其值,num - 基本类型
    private static int function4() {
        int num = 100;
        try {
            System.out.println("try print");
            return num += 60;
        } catch (Exception e) {
            System.out.println("catch print");
        } finally {
            System.out.println("finally print");
            if (num > 100) {
                System.out.println("num > 100, num = " + num);
            }
            num = 180;
        }
        return 200;
    }

    private static Map<String, String> function5() {
        Map<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        try {
            map.put("key1", "value_try");
            return map;
        } catch (Exception e) {
            map.put("key1", "value_catch");
        } finally {
            map.put("key1", "value_finally");
            map = null;
        }
        return map;
    }

}

结果

try print
finally print
num > 100, num = 110
110
==============
try print
function3 print
finally print
function3 returnValue
==============
try print
finally print
num > 100, num = 160
160
==============
value_finally

结论

function1&2&3:
finally语句在return语句执行之后返回方法结果之前执行。也就是说先执行了一遍return语句但是没有return返回值,再去执行finally中的语句,等finally执行完了再return返回值。
function4&5:
try中return语句执行“一半”后在finally变更其值,基本类型的不会变更成功,非基本类型会改变try中return的结果。

try、finally中有return

代码

public class ReturnLab2 {

    public static void main(String[] args) {
        System.out.println(function1());
    }

    private static int function1() {
        int num = 100;
        try {
            System.out.println("try print");
            return num += 60;
        } catch (Exception e) {
            System.out.println("catch print");
        } finally {
            System.out.println("finally print");
            if (num > 100) {
                System.out.println("num > 100, num = " + num);
            }
            return 200;
        }
    }
    
}

结果

try print
finally print
num > 100, num = 160
200

结论

try中的return语句正常执行然后正常进入finally执行,但是finally中有return,在finally中就将return执行完毕了,所以try中的return就执行了“一半”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值