论坛首页 入门技术论坛

一道很诡异的程序题

浏览 8013 次
精华帖 (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.这是为什么啊?
   发表时间: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());
    }
}
0 请登录后投票
   发表时间:2010-11-20  
这跟编译器参数有关系么?
0 请登录后投票
   发表时间:2010-11-20  
http://www.soaspx.com/dotnet/csharp/csharp_20101021_6067.html

这里有解释  看一下吧
0 请登录后投票
   发表时间:2010-11-20  
cnsuifeng 写道
http://www.soaspx.com/dotnet/csharp/csharp_20101021_6067.html

这里有解释  看一下吧


呵呵  太感谢你了,前段时间去面试的一个题目,我想结果肯定不是2,很果断地填了个1,回去在机子上
敲了一遍,还真是1,只是一直都不知道为什么
0 请登录后投票
   发表时间:2010-11-20  
说起来还真没怎么注意finally,受教了
0 请登录后投票
   发表时间:2010-11-20  
http://hi.baidu.com/freish/blog/item/9c77bf1126f6f670cb80c41d.html

这个讲解的比较清楚!

当finally中有return语句的时候,try中的return会被抛弃;当finally中没有return语句时,try中return的值会被保存且被返回。
0 请登录后投票
   发表时间:2010-11-20  
还是不懂啊,那位大虾能更详细讲解下的?
哥不能不懂装懂啊···
0 请登录后投票
   发表时间:2010-11-20  
兄弟啊,上面的代码在Eclipse貌似运行不出来啊
0 请登录后投票
   发表时间:2010-11-20  
buzaibeishang 写道
兄弟啊,上面的代码在Eclipse貌似运行不出来啊

应该是楼主搞错了,在catch后面要加个exception的
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics