java中return

达达KZT 2012-07-29 09:59:05

public static int test(){
int i=0;
try{
return i++;
}finally{
++i;
i=32;
}
}


为什么这里输出的是0

知道的大虾回答下。谢谢。
高分奉上。就100分了。

^_^

不知道的、给建议的、打酱油的请不要回复。
因为楼太高真不好找答案。
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
达达KZT 2013-04-07
  • 打赏
  • 举报
回复
达达KZT 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个也是每月都有的问题啊。。。

关键在于 return 语句并不是立即返回,它本质上将设置返回结果和执行返回过程是分开处理的:
首先它做了一个动作,将待返回的数据存入返回变量中,有点类似于以前Basic中:
函数名 = i++;
然后才是后续的计算和finally的执行。



这里有个很好的扫盲Blog,一定去看看:
http://www.ticmy.com/?p=5……
[/Quote]
感谢。
那网站是你建的吗?
达达KZT 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:
那网站是你建的吗?


不是的,是:ticmy(龙四)
[/Quote]
哦。
MiceRice 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
那网站是你建的吗?
[/Quote]

不是的,是:ticmy(龙四)
爱摸鱼de老邪 2012-07-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

书上有这么一句话:
如果在try catch语句中,try中有return语句,则finally块中的语句先于return语句执行。
楼主可能没读清这句的意思,这句是说在return之前,finally中的语句是先执行的,它执行完后才return;但是return的值是什么,这个值确是在执行finally语句前已经确定了,return的值不会因为finally中语句的执行而改变了。

当……
[/Quote]
++
lip009 2012-07-29
  • 打赏
  • 举报
回复
上面说了很多了,补充一点:

return i++;

i++先把变量i作用于return表达式,然后再计算i=i+1
++i先计算i=i+1,然后再把计算结果i作用于return表达式


所以i = 0;时,return i++;返回0,而return ++i;返回1。

brightyq 2012-07-29
  • 打赏
  • 举报
回复
书上有这么一句话:
如果在try catch语句中,try中有return语句,则finally块中的语句先于return语句执行。
楼主可能没读清这句的意思,这句是说在return之前,finally中的语句是先执行的,它执行完后才return;但是return的值是什么,这个值确是在执行finally语句前已经确定了,return的值不会因为finally中语句的执行而改变了。

当在finally中有return语句的时候,楼主可以试试。这时返回的值又不一样了。
MiceRice 2012-07-29
  • 打赏
  • 举报
回复
这个也是每月都有的问题啊。。。

关键在于 return 语句并不是立即返回,它本质上将设置返回结果和执行返回过程是分开处理的:
首先它做了一个动作,将待返回的数据存入返回变量中,有点类似于以前Basic中:
函数名 = i++;
然后才是后续的计算和finally的执行。



这里有个很好的扫盲Blog,一定去看看:
http://www.ticmy.com/?p=56

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧