锁定老帖子 主题:一道很诡异的程序题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-11-20
public int test() { int a = 1; try { return a; }catch { //todo:handle exception }finally { a++; } return a; } 大家看看这个方法的返回值是多少啊?为什么try语句里的return会执行2次?第二次的确返回的是2,但打印的确是1.这是为什么啊? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-11-20
看看反编译还原的代码吧
import java.io.PrintStream; public class Test { public Test() { } public static int test() { int i = 1; int j; try { j = i; } catch(Exception exception) { i++; break MISSING_BLOCK_LABEL_22; } i++; return j; Exception exception1; exception1; i++; throw exception1; return i; } public static void main(String args[]) { System.out.println(test()); } } |
|
返回顶楼 | |
发表时间:2010-11-20
这跟编译器参数有关系么?
|
|
返回顶楼 | |
发表时间:2010-11-20
http://www.soaspx.com/dotnet/csharp/csharp_20101021_6067.html
这里有解释 看一下吧 |
|
返回顶楼 | |
发表时间:2010-11-20
cnsuifeng 写道 http://www.soaspx.com/dotnet/csharp/csharp_20101021_6067.html
这里有解释 看一下吧 呵呵 太感谢你了,前段时间去面试的一个题目,我想结果肯定不是2,很果断地填了个1,回去在机子上 敲了一遍,还真是1,只是一直都不知道为什么 |
|
返回顶楼 | |
发表时间:2010-11-20
说起来还真没怎么注意finally,受教了
|
|
返回顶楼 | |
发表时间:2010-11-20
http://hi.baidu.com/freish/blog/item/9c77bf1126f6f670cb80c41d.html
这个讲解的比较清楚! 当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,try中return的值会被保存且被返回。 |
|
返回顶楼 | |
发表时间:2010-11-20
还是不懂啊,那位大虾能更详细讲解下的?
哥不能不懂装懂啊··· |
|
返回顶楼 | |
发表时间:2010-11-20
兄弟啊,上面的代码在Eclipse貌似运行不出来啊
|
|
返回顶楼 | |
发表时间:2010-11-20
buzaibeishang 写道 兄弟啊,上面的代码在Eclipse貌似运行不出来啊
应该是楼主搞错了,在catch后面要加个exception的 |
|
返回顶楼 | |