A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武庆东 中级黑马   /  2012-9-8 09:08  /  1202 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 武庆东 于 2012-9-8 09:24 编辑

看到两个类输出结果,和预想的不一样!大家看一下哈
public class  A
{
        public static void  main(String args[])
        {
                A t  = new  A();
                int  b  =  t.get();
                System.out.println(b);
        }
        
        public int  get()
        {
                try
                {
                        return 1 ;
                }
                finally
                {
                        return 2 ;
                }
        }
}
-------------------------输出结果----------------------
2  //这个类输出结果不是1?
----------------------------------------------------------
public  class Test {

    /**
     * @param args add by zxx ,Dec 9, 2008
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(new Test().test());;
    }

    static int test()
    {
        int x = 1;
        try
        {
            return x;
        }
        finally
        {
            ++x;
        }
    }
   
}
---------------输出结果------------------------------
1   //为什么不是2?
return 语句和finally执行的先后顺序,比较上下两个类的输出结果的给出解释?

3 个回复

倒序浏览
说实话 我找了半天 也没觉得那里不对,第一个你return两次,后来的覆盖了,如果你不信你在return1 和return2前面加上两个输出语句,就懂了
回复 使用道具 举报
其实很简单 finally 在程序中是绝对执行的 不论程序是否捕获异常 若无异常 java代码按顺序执行 所有对一段 覆盖 值为2  第二段 输出时 值为1
回复 使用道具 举报
由于try{
。。。。
}catch(){
。。。。。
}
finally{
。。。。。

是一种语句,最终都是会执行到finally{
。。。。。
}上,所以第一个程序中的finally 里面的returne 2 会覆盖 try 里面的returne 1;

而第二个程序中,finally{}里面没有return  语句,只是在try{}里面返回的结果中再做了 ++的操作。


不知这样回答你是否能理解,好好踹磨下。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马