关于 try-catch-finally 的总结

尊重原创,转载请注明出处!
创作不易,如有帮助请点赞支持~

引言

try-catch-finally 在开发中会经常用到,但是具体到一些场景,如果对它的理解不够深,就没法对代码的逻辑执行进行把控。以下的几种场景,你们都能正确地知道它的执行结果吗?

无返回值函数,如果没有 catch 异常,finally 会执行,再抛出异常

测试代码如下:

private static void test1() {
    System.out.println("test1 start");
    try {
        int a = 10;
        int b = 0;
        System.out.println("" + (a / b));
    } finally {
        System.out.println("finally");
    }
    System.out.println("test1 end");
}

执行结果如下,可以看到发生异常后,finally 内的代码执行了,再抛出异常:
在这里插入图片描述

无返回值函数,如果 catch 了异常,先执行 catch 中的代码,再执行 finally 中的逻辑

测试代码如下:

private static void test2() {
    System.out.println("test2 start");
    try {
        int a = 10;
        int b = 0;
        System.out.println("" + (a / b));
    } catch(ArithmeticException e) {
        System.out.println("catch ArithmeticException: " + e.getMessage());
    } finally {
        System.out.println("finally");
    }
    System.out.println("test2 end");
}

执行结果如下,先执行 catch 的逻辑,再执行 finally 的逻辑:
在这里插入图片描述

有返回值函数,如果没有 catch 异常,且在 finally 里面有返回值,则正常返回,不抛异常

测试代码如下:

private static int test3() {
    System.out.println("test3 start");
    try {
        int a = 10;
        int b = 0;
        return (a / b);
    } finally {
        System.out.println("finally");
        return 1000;
    }
}

执行结果如下,finally 的逻辑被执行,并正常返回:
在这里插入图片描述

有返回值函数,如果 catch 了异常,且 finally 里面有返回值,则 catch 的逻辑会执行,但最终返回的是 finally 中的返回值

测试代码如下:

private static int test4() {
    System.out.println("test4 start");
    try {
        int a = 10;
        int b = 0;
        return (a / b);
    } catch(ArithmeticException e) {
        System.out.println("catch ArithmeticException: " + e.getMessage());
        return -1;
    } finally {
        System.out.println("finally");
        return 1000;
    }
}

执行结果如下,catch 中的逻辑虽然执行了,但是并没有按 catch 中的返回值返回,而是执行 finally 中的逻辑后,按 finally 中的返回值返回:
在这里插入图片描述

有返回值函数,如果在 finally 里面无返回值,且没有 catch 异常,则先执行 finally,再抛出异常

测试代码如下:

private static int test5() {
    System.out.println("test5 start");
    try {
        int a = 10;
        int b = 0;
        return (a / b);
    } finally {
        System.out.println("finally");
    }
}

执行结果如下,finally 的逻辑会执行,但最终还是会抛出异常:
在这里插入图片描述

总结

在开发中一定要注意 try-catch-finally 之间的关系,在一些比较重要的逻辑,比如文件操作、数据的操作等,要灵活运用 catch 捕获相应的异常,并且在 finally 中做一些必要的处理,防止内存泄漏、或数据异常等情况发生!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值