答案是:会执行 try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再返回。所以说finally{}在return中间执行。
public class MyTest {
public int getA(){
int a = 10;
try{
a = 10;
System.out.println("try a = " + a);
return a;
}
finally {
a = 40;
System.out.println("finally a =" + a);
}
}
public static void main(String[] args) {
MyTest myTest = new MyTest();
int a = myTest.getA();
System.out.println(a);
}
}
try a = 10
finally a =40
10
解释:
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,
因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。