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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guobin_lu 中级黑马   /  2013-3-31 19:00  /  1709 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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

评分

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

查看全部评分

6 个回复

倒序浏览
try{}
catch{}
filally{}语句块中,无论是否出现异常,filally语句中的代码一定会执行的,即使你用return跳出,也会在跳出前执行filally中的代码。finally中的语句一般是用来释放资源的。

评分

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

查看全部评分

回复 使用道具 举报
finally中的语句是必须执行的,所以在执行return之前会先检查是否有finally,有就执行finally中发代码,没有就返回
回复 使用道具 举报
因为finally中的必须执行,如果先运行了return了,那么程序结束,就读不到了finally了
回复 使用道具 举报
try  catch  finally 各自执行的注释
1.try
执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
2.catch
除非try里面执行代码发生了异常,否则这里的代码不会执行  
3.finally
不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
所以程序先判断有没有finally ,有的话先执行finally,再去return

评分

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

查看全部评分

回复 使用道具 举报
因为 return后,就彻底跳出方法体了,不会再执行里的其他代码!
所以 如果想要执行finally里的代码,必须在return之前。

先执行finally,再执行return,是try-finally的流程!
回复 使用道具 举报
.NET的错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止。执行顺序:①执行try{}里的code,将结果保存在内存中未返回;②执行 finally {}里的 code;③返回try{}里的执行结果。
try
{ //执行代码,不确定是否会出错 }
catch
{ //出错处理 }
finally
{ //无论怎样,都要执行 }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马