finally

170 阅读1分钟

finally无论如何都会被执行,需要注意以下细节:

情况一:finally中没有return,但是修改try里面的返回值

static public int test(){
    int i = 0;
    try{
        return i;
    }catch (Exception e){
    }finally {
        System.out.println("finally执行了");
        i=1;
    }
    return -1;//不起作用,只是为了编译通过,不报错
}

执行结果:

finally执行了
0

即finally中对try中的return值的修改(i=1)不起作用。

情况二:finally中有return

static public int test(){
    int i = 0;
    try{
        return i;
    }catch (Exception e){
    }finally {
        System.out.println("finally执行了");
        return 100;
    }
}

执行结果:

finally执行了
100

即finally中的返回值会覆盖try中的返回值。