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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在try语句中使用return时,finally语句是否仍然被执行?

6 个回复

倒序浏览
会执行,在return前执行。
  1. using System;

  2. namespace test4
  3. {
  4. internal class Program
  5. {
  6. static string x;
  7. private static void Main(string[] args)
  8. {
  9. Console.WriteLine(Method());
  10. Console.WriteLine(x);
  11. Console.ReadKey();
  12. }
  13. static string Method()
  14. {
  15. try
  16. {
  17. x = "try";
  18. return x;
  19. }
  20. finally
  21. {
  22. x = "finally";
  23. }
  24. }
  25. }
  26. }
复制代码

回复 使用道具 举报
彭家贰小姐 发表于 2013-8-10 23:13
会执行,在return前执行。

不对,举个例子:使用try catch释放资源
try{return conn}
catch{ex}
finally{conn.Dispose()}
如果说先执行finally的话 连接对象先释放了 就不可能返回一个连接对象了
准确的说 应该是执行完了return语句,返回了一个连接对象 但是没有立即退出方法,做了暂时的停留 检测有没有finally块 有finally块会继续执行finally块中的代码,然后退出当前方法
回复 使用道具 举报
本帖最后由 彭家贰小姐 于 2013-8-11 00:47 编辑
高腾 发表于 2013-8-11 00:16
不对,举个例子:使用try catch释放资源
try{return conn}
catch{ex}


尝试了你的例子,又去了解了下,找到了一篇很好的文章。
http://blog.csdn.net/gaoyuanfeng/article/details/4064388
貌似return的是值类型还是引用类型,在栈中有些区别,但仍然没有全看明白{:soso_e195:}
值得再深入了解下{:soso_e113:}

回复 使用道具 举报
顶一个。
回复 使用道具 举报
会被执行的
  1. using System;
  2. namespace Que
  3. {
  4.     class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {
  8.              Try();
  9.              Console.ReadKey();

  10.         }
  11.         static void Try()
  12.         {
  13.             try
  14.             {
  15.                 Convert.Toint32("50");
  16.                 return;
  17.             }
  18.             catch
  19.             {
  20.             }
  21.             finally
  22.             {
  23.                 Console.WriteLine("finally中的语句被执行");
  24.             }
  25.         }
  26.     }

  27. }

  28. //输出结果
  29. //finally中的语句被执行

复制代码
回复 使用道具 举报
会先执行try中的return并跳进finally执行内部方法体
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马