owczhlol

我们都知道,finally语句是一定会执行的,同样return语句也标志着退出当前方法,那么他们两个一起出现会产生怎么样的情况呢?

废话少说,上代码:

首先的一个例子,我们先检测一下,两个块中都含有return语句会怎么样

static int i = 1;

static int try_finally() {
try {
return i;
} finally {
i += 1;
return i;
}
}

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

结果打印了2,说明即使有return,finally中的语句也得到了执行。

 

第二个例子,try里面有return,finally没有return,会怎样?

static int i = 1;

static int try_finally() {
    try {
        return i;
    } finally {
        System.out.println("finally");
    }
}

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

结果打印了finally和1,这说明finally语句即使在try中有return的情况下,仍然能得到执行

 

那么问题来了,这两个块究竟是什么样的执行顺序,究竟是程序跳过了try中的return直接先去执行finally,然后再回去执行return?还是将return的结果暂存一下再去执行finally?

测试代码三,

static int i = 1;

static int try_finally() {
    try {
        return i;
    } finally {
        i += 1;
    }
}

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

结果打印了1

这就说明,程序在执行到try中的return后,将这个return的值暂存在函数栈中,再去执行finally,如果finally中也有一个return,就像例1,那就直接返回finally中的这个return值,函数栈中的就不要了,如果finally中没有出现return,那就返回之前暂存的值。

分类:

技术点:

相关文章: