A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求解释代码
public  class Test {  
public static void main(String[] args) {  
      System.out.println(new Test().test());;  
}  
  
static int test()  
{  
        int x = 1;  
    try{  
        return x;  
    }  
    finally{  
        ++x;  
    }  
}     
}

7 个回复

倒序浏览
finally块的语句在try或catch中的return语句执行之后,返回之前执行,也就是说return是等finally执行后才返回,所以值 应该是2
回复 使用道具 举报
这个今天我也看到了 答案是1
我个人理解是  return 出去 1  然后 ++x.x的值已经变了  但是由于已经return了  
所以 看到的值为1
个人见解  我也是自己猜的
回复 使用道具 举报
答案是1,执行到return语句后,会打开返回通道,将结果放进去,但是还没有完全返回,这个时候才执行finally语句,但是由于返回值已经蓄势待发,finally语句中 的代码不会影响返回值了.而且finally一般是用来释放资源,这样的代码应该只有考试的时候回出现
回复 使用道具 举报 1 0
会执行,但是说之前还是之后就不合适了,可以说try执行完后return已经构成完成路径
回复 使用道具 举报
YSL450125 发表于 2016-9-16 21:32
答案是1,执行到return语句后,会打开返回通道,将结果放进去,但是还没有完全返回,这个时候才执行finally语句, ...

同意这个观点
回复 使用道具 举报
答案1 正解,return 返回和finally是同时进行,至于谁快谁慢就随他们了
回复 使用道具 举报
finally块在return之前执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马