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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王起 中级黑马   /  2013-3-16 21:54  /  1716 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家都知道,不管try中语句是否执行,都会执行finally ,但是如果执行了try,并且try里面的语句含有return语句,那么finally 中的语句还会执行吗?很有意思的题目!

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
  try
            {
                int a=1;
                if (a > 1)
                    Console.WriteLine("right");
                else
                    return;
            }
            catch(Exception e)
            {
               
            }finally
            {
                Console.WriteLine("hello");
                Console.ReadKey();
            }
经过测试,验证了那句话,,不管try中语句是否执行,都会执行finally,为什么那我就不太知道了...汗
回复 使用道具 举报
这个也说不一定 如果return之前没有System.exit() ;类似让应用停下来的代码的话, finally中的代码就会执行 注意是在return之前执行的,希望可以帮到你
回复 使用道具 举报
try{}catch{}finally{}
异常处理模块。
finally
{
   这里的代码不管任何情况都会执行,但不能return
}

下面用两个简单的例子进行对比,大家就清楚了
public static int GetNum()
{
     int num=1;
     try
     {
        return num++;
     }catch
     {
       return num;
     }finally
    {
       num+=10;
      Console.WriteLine(num);
    }
}
调用GetNum()方法
Console.WriteLine(GetNum());
打印出来的结果为:12      
                              2
也就是说虽然finally中改变了num的值,但是返回的确是try{}中的num值
这就说明了,如果finally{}前面有始终要执行的return,则finally{}虽然执行,但并不影响返回结果

例2:

public static int GetNum()
{
     int num=1;
     try
     {
         num++;
     }catch
     {
        //num++;
     }finally
    {
       num+=10;
      Console.WriteLine(num);
    }
   return num;
}
调用GetNum()方法
Console.WriteLine(GetNum());
打印的结果为:12
                       12
这就说明,在finally中改变了num的值,而且因为前面没有始终要执行的return,所以得出的结果相同。

而且在实际开发中,finally{}中一般不用于计算,而是用于释放对象资源等
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马