日期:2014-05-20  浏览次数:20621 次

java中return
Java code

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



为什么这里输出的是0

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

^_^

不知道的、给建议的、打酱油的请不要回复。
因为楼太高真不好找答案。

------解决方案--------------------
这个也是每月都有的问题啊。。。

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



这里有个很好的扫盲Blog,一定去看看:
http://www.ticmy.com/?p=56
------解决方案--------------------
书上有这么一句话:
如果在try catch语句中,try中有return语句,则finally块中的语句先于return语句执行。
楼主可能没读清这句的意思,这句是说在return之前,finally中的语句是先执行的,它执行完后才return;但是return的值是什么,这个值确是在执行finally语句前已经确定了,return的值不会因为finally中语句的执行而改变了。

当在finally中有return语句的时候,楼主可以试试。这时返回的值又不一样了。
------解决方案--------------------
上面说了很多了,补充一点:

return i++;

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


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


------解决方案--------------------
探讨

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

当……