注:
1.当finally中没有return,但是try中有return时,执行顺序是try--finally--return,但是finally中不会修改在try中的值,在try中的值会保存到函数栈中,继续执行finally,执行完后,再从栈中取出返回;代码如下
public class FinallyTest
{ public static void main(String[] args) { System.out.println(new FinallyTest().test());; } static int test(){ int x = 1; try{ x++; return x;} finally{ ++x; }}}
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量x进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。2.当finally中和try中都有return时,执行顺序是先执行try中,将要返回的结果保存到函数栈中,在执行finally中,此时finally中会返回在该快中的值,而不会执行try中的return语句,代码如下:
public class Test
{
public static void main(String[]
args) {
System.out.println(new Test().test());
}
int test(){
try{
return func1();}
finally{
return func2();}}
int func1(){
System.out.println(“func1”);
return 1;}
int func2(){
System.out.println(“func2”);
return 2;}
-----------执行结果-----------------
func1
func2
2