关闭

try中有return,finally中的code会不会执行,执行是在return前还是后?

138人阅读 评论(0) 收藏 举报
分类:
注:
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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18038次
    • 积分:686
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:34篇
    • 译文:2篇
    • 评论:0条
    文章分类