java try catch finally记录

 try catch finally

1、返回值问题

    public static int getNum() {
        int ret = 0;
        try {
            ret = 1;
            return ret;
        } finally {
            ret = 2;
        }
    }
结果:1
结果分析:return ret;语句ret值1被缓存,然后在执行finally代码块,再return缓存的值1

 2、finally 代码块中有return

public static int getNum() {
        int ret = 0;
        try {
            ret = 1;
            return ret;
        } finally {
            ret = 2;
            return ret;
        }
    }
结果:2
结果分析:finally代码块中的return执行完后会直接退出方法,不会再执行try代码快中的return,或者catch代码块中的return,
也会吃掉try或者catch代码快中发生的异常;

2、finally 代码块中发生异常

public static int getNum2() {
        int ret = 0;
        try {
            ret = 1;
            int r = 1 / 0;
            return ret;
        } catch (Exception e) {
            ret = 3;
            throw new RuntimeException("catch");
        } finally {
            ret = 2;
            throw new RuntimeException("finally");
        }
    }
结果: java.lang.RuntimeException: finally
原因分析:

finally代码块的优先级最高
,finally代码块中发生异常,会直接退出方法,对外暴露异常,并且会导致try或者catch代码快中发生的异常被吃掉,调用者感觉不到catch中发生的异常; 同样finally中有return语句,也会吃掉try或者catch代码快中发生的异常; 因此良好的代码风格是:
1、finally代码块中不要写return语句 2、finally代码块中的代码要用try{}catch(){}处理掉,保证finally代码块中不要有异常出现

其他人总结:

https://blog.csdn.net/mxd446814583/article/details/80355572

https://www.cnblogs.com/plokmju/

原文地址:https://www.cnblogs.com/ccgblog/p/10282512.html