Finally-操作返回值

Posted 【我是谁】

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Finally-操作返回值相关的知识,希望对你有一定的参考价值。

Finally中操作返回值会出现一个问题?值没有被改变?

 1   static int M1()
 2         {
 3             int result = 100;
 4             try
 5             {
 6                 result = result + 1;
 7                 //======引发异常的代码==========
 8                 int x = 10, y = 0;
 9                 Console.WriteLine(x / y);
10                 //======引发异常的代码==========
11                 return result;
12             }
13             catch
14             {
15                 Console.WriteLine("catch被执行了");
16                 result = result + 1;
17                 return result;
18             }
19             finally
20             {
21                 Console.WriteLine("====finally被执行了=================");
22                 result = result + 1;
23             }
24         }
View Code

结果是:

为什么会这样呢?不是说finally中的代码无论如何都会被执行吗?那就要看编译器会对我们的代码做了什么?

Reflector反编译的代码:  会把我们要返回的值在try-catch中操作之后赋给一个全局变量,并且返回。finally中也操作了num,但是没有赋值给num4。

 对于引用类型是怎样的呢?这个大家可以试试,我就不写了,比较基础

以上是关于Finally-操作返回值的主要内容,如果未能解决你的问题,请参考以下文章

关于finally对返回值的影响

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

带返回值的 try finally 构造 [重复]

try,finally问题

try catch finally

字节码分析finally块对return返回值的影响