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

来源:互联网 发布:原创歌曲网站软件 编辑:程序博客网 时间:2024/04/29 00:24
---------------------- 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
原创粉丝点击