黑马程序员技术交流社区

标题: 一段没想明白运行结果的的程序 [打印本页]

作者: qmlovewhr    时间: 2013-7-7 22:57
标题: 一段没想明白运行结果的的程序
本帖最后由 杨兴庭 于 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");
  }
}

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

作者: 李江    时间: 2013-7-7 23:27
我是这样理解的:try....catch...finally...结构中,无论在try和catch中是否return,finally肯定是要执行的,也就是说,只有finally的内容执行完后函数才返回。因为执行顺序是
try catch finally 所以 return x 中x=1; 接着执行finally,x为2,打印,然后打印 aaa  最后返回x 为1,再打印,即结果为 2,aaa, 1
作者: denghui1010    时间: 2013-7-7 23:33
return x;的时候,Test方法获得返回值1,但是调用还没有结束,必须要执行finally,所以输出2,aaa,之后Test方法调用结束,Test方法的返回值是1,new wTest().test()的值=1被输出,所以结果是
2
aaa
1
作者: 王靖远    时间: 2013-7-7 23:37
楼上正解。搞清楚finally在return之前执行就OK啦。不过如果try代码块中的内容是System.exit(0),那么就不会执行finally里面的语句了
作者: 哪颗最亮的星星    时间: 2013-7-7 23:39
结果是:
2
aaa
1

先执行完finally里的内容后,才返回x的值,这个x的值是对象的x .




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2