黑马程序员-try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  static void Main(string[] args)
        {
            Console.WriteLine(GetIt());
            Console.ReadKey();
        }

        static int GetIt()
        {
            int i = 8;
            try
            {
                i++;
                Console.WriteLine("a");
                return i;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧)
            }
            finally
            {
                Console.WriteLine("b");
                i++;
            }
        }

上面程序的执行结果是ab9

try{}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?

会执行,在return后执行。

  static void Main(string[] args)
        {
            //Console.WriteLine(GetIt());
            Console.WriteLine(GetPerson().Age);
            Console.ReadKey();
        }

        static Person GetPerson()
        {
            Person p = new Person();
            p.Age = 8;
            try
            {
                p.Age++;
                Console.WriteLine("a");
                return p;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧。搞完就走)
            }
            finally
            {
                Console.WriteLine("b");
                p.Age++;
            }
        }

补充回答(也助记):读取数据库中数据的条数的程序

public int QueryCount()

{

   …..

  try

   {       

     return cmd.ExecuteScalar();

   }

  finally

   {

     cmd.Dispose();

   }

}

先执行cmd.ExecuteScalar(),把返回值暂时存起来,然后再去执行finally(钱放在这,我去劫个色),然后把返回值返回。return都是最后执行,但是return后的表达式的计算则是在finally之前。

 

如果C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,因为cmd已经Dispose了。



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值