finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
执行下面的代码:
public class TestReturn {
public String message() {
System.out.println("returned start");
return "return";
}
public String testFinal() {
try {
return message();
} catch (Exception e) {
e.printStackTrace();
return "exception";
} finally {
System.out.println("do finally");
// return "finally"; -----1
}
}
public static void main(String[] args) {
TestReturn test = new TestReturn();
System.out.println( test.testFinal());
}
}
执行结果为:
returned start
do finally
return
把代码中红色那行注释去掉 执行结果为:
returned start
do finally
finally
通过这个例子可以发现
try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回,而在finally如果有return那么就返回finnally的值。