java学习之try catch finally中的return

来源:互联网 发布:linux根目录设置多大 编辑:程序博客网 时间:2024/05/18 12:29

首先,贴下测试代码

public class Test {

    public static void main(String[] argsthrows Exception {

     System.out.print(test(1));

    }

public static String test(int i){

int k=0;

try {

int j=5/i;

k=1;

// return "try"+k;

} catch (Exceptione) {

// TODO: handle exception

k=2;

return"catch"+k;

}

finally{

k=3;

// return "finally"+k;

}

k=4;

return""+k;

}


首先明确,return能出现在4个地方,即try中、catch中、finally中以及finally外,当try中或finally中出现了return,则finally就不能出现,否则变异报错,反之亦然。

其次,我们来分两种情况,一种是有异常情况,一种是无异常情况

一、无异常情况

        1⃣️try中有returnfinally中也有:最终返回结果是执行finally中的return,如上面代码将返回finally3

    2⃣️try中有return,finally中没有,但finally中有影响try中的返回:其实并不影响,因为try早已把返回值存入栈中,如上面代码将返回try1,而不是try3

    3⃣️try中没有return,finally中有:当然执行finally中的return啦

二、有异常情况

    1⃣️finally外有return,catch中也有:其实没多大意义,因为finally外的逻辑压根不会执行到,当然是执行catch中的return

    2⃣️try中有无return不重要,不影响

          catch中有returnfinally中也有:最终返回结果是执行finally中的return,如上面代码将返回finally3

catch中有return, finally中没有,但finally中有影响catch中的返回:其实并不影响,因为catch早已把返回值存入栈中,如上面代码将返回catch2,而不是catch3

catch中没有return,finally中有:当然执行finally中的return啦


0 0
原创粉丝点击