黑马程序员技术交流社区

标题: 关于return的问题 [打印本页]

作者: guobin_lu    时间: 2013-3-31 19:00
标题: 关于return的问题
  1.   static void Main(string[] args)
  2.         {
  3.             Console.WriteLine(Calc());

  4.             Console.ReadKey();
  5.         }

  6.         static int Calc()
  7.         {
  8.             int i = 0;
  9.             try
  10.             {
  11.                 return i;
  12.             }
  13.             finally
  14.             {
  15.                 Console.WriteLine("finally");
  16.                 i++;
  17.             }
  18.         }
复制代码
为什么先输出 finally 才 return

作者: 许正龙    时间: 2013-3-31 19:09
try{}
catch{}
filally{}语句块中,无论是否出现异常,filally语句中的代码一定会执行的,即使你用return跳出,也会在跳出前执行filally中的代码。finally中的语句一般是用来释放资源的。
作者: 刘松老师    时间: 2013-3-31 19:12
finally中的语句是必须执行的,所以在执行return之前会先检查是否有finally,有就执行finally中发代码,没有就返回
作者: HM何伟    时间: 2013-3-31 19:18
因为finally中的必须执行,如果先运行了return了,那么程序结束,就读不到了finally了
作者: 张振    时间: 2013-3-31 19:24
try  catch  finally 各自执行的注释
1.try
执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
2.catch
除非try里面执行代码发生了异常,否则这里的代码不会执行  
3.finally
不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
所以程序先判断有没有finally ,有的话先执行finally,再去return
作者: DWC_5101    时间: 2013-3-31 19:48
因为 return后,就彻底跳出方法体了,不会再执行里的其他代码!
所以 如果想要执行finally里的代码,必须在return之前。

先执行finally,再执行return,是try-finally的流程!
作者: 张正强    时间: 2013-3-31 20:27
.NET的错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。执行顺序:①执行try{}里的code,将结果保存在内存中未返回;②执行 finally {}里的 code;③返回try{}里的执行结果。
try
{ //执行代码,不确定是否会出错 }
catch
{ //出错处理 }
finally
{ //无论怎样,都要执行 }




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