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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmlovewhr 中级黑马   /  2013-7-7 22:57  /  1107 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-8 16:43 编辑

class wTest
{
public static void main(String[] args)
{
  System.out.println(new wTest().test());
}
static int test()
{
  int x=1;
  try
  {
   return x;
  }
  finally
  {
   ++x;
   System.out.println(x);
   System.out.println("aaa");
  }
}

}
你能告诉我运行结果是什么吗?为什么会有这样的运行结果,求解释。

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

4 个回复

倒序浏览
我是这样理解的:try....catch...finally...结构中,无论在try和catch中是否return,finally肯定是要执行的,也就是说,只有finally的内容执行完后函数才返回。因为执行顺序是
try catch finally 所以 return x 中x=1; 接着执行finally,x为2,打印,然后打印 aaa  最后返回x 为1,再打印,即结果为 2,aaa, 1
回复 使用道具 举报
return x;的时候,Test方法获得返回值1,但是调用还没有结束,必须要执行finally,所以输出2,aaa,之后Test方法调用结束,Test方法的返回值是1,new wTest().test()的值=1被输出,所以结果是
2
aaa
1
回复 使用道具 举报
楼上正解。搞清楚finally在return之前执行就OK啦。不过如果try代码块中的内容是System.exit(0),那么就不会执行finally里面的语句了
回复 使用道具 举报
结果是:
2
aaa
1

先执行完finally里的内容后,才返回x的值,这个x的值是对象的x .
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马