黑马程序员技术交流社区

标题: 分享给大家一个问题,try finally [打印本页]

作者: 王起    时间: 2013-3-16 21:54
标题: 分享给大家一个问题,try finally
大家都知道,不管try中语句是否执行,都会执行finally ,但是如果执行了try,并且try里面的语句含有return语句,那么finally 中的语句还会执行吗?很有意思的题目!
作者: 丁涧泉    时间: 2013-3-17 05:29
  try
            {
                int a=1;
                if (a > 1)
                    Console.WriteLine("right");
                else
                    return;
            }
            catch(Exception e)
            {
               
            }finally
            {
                Console.WriteLine("hello");
                Console.ReadKey();
            }
经过测试,验证了那句话,,不管try中语句是否执行,都会执行finally,为什么那我就不太知道了...汗
作者: 黑马-蒋振军    时间: 2013-3-24 14:40
这个也说不一定 如果return之前没有System.exit() ;类似让应用停下来的代码的话, finally中的代码就会执行 注意是在return之前执行的,希望可以帮到你
作者: 曾玉锋    时间: 2013-3-24 17:18
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{}中一般不用于计算,而是用于释放对象资源等




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2