try {}里有一个return语句,finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
try {}和finally{}里都有return语句,那么finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
<span style="font-family:Microsoft YaHei;font-size:14px;">public class TryAndFinal {
public static void main(String[] args) {
System.out.println(test2());
}
static int test2()
{
int x = 1;
try
{ System.out.println("this is in try");
System.out.println(x);
return x;
}
finally
{ System.out.println("this is infinal");
++x;
System.out.println(x);
}
}
}</span>
运行结果是:
<span style="font-family:Microsoft YaHei;font-size:14px;">this is in try
1
this is infinal
2
1
</span>
也就是说,在try中间有返回值,则结果就是那个返回值
<span style="font-family:Microsoft YaHei;font-size:14px;">public class TryAndFinal {
public static void main(String[] args) {
System.out.println(test2());
}
static int test2()
{
int x = 1;
try
{ System.out.println("this is in try");
System.out.println(x);
return x;
}
finally
{ System.out.println("this is infinal");
++x;
System.out.println(x);
return x;
}
}
}
</span>
则返回结果是:
<span style="font-family:Microsoft YaHei;font-size:14px;">this is in try
1
this is infinal
2
2
</span>
也就是说一定会先执行try 中的内容,包括返回值,然后是finally中的内容。
但是,执行完try中后,这时程序并没有结束,这就相当于你的test()方法其实还没有完,之前的返回都放在一个变量里,当你执行完finally时,如果值改变值返回新的值,如果没有改变依旧返回原来的值。