9.finally块执行顺序
9.1 题目
请说出以下代码:
static void Main(string[] args)
{
int i = GetInt();
Console.WriteLine($"第A处 i = {i}");
}
static int GetInt()
{
int i = 10;
try
{
return i;
}
finally
{
i = 11;
Console.WriteLine($"第B处 i = {i}");
}
}
- A处和B处谁先打印?
- A、B处打印的i值分别是多少?
9.2 深入解析
- B处先打印,A处后打印。
- A处 i = 10,B处 i = 11。
解析
try 执行完后仍会执行 finally。在 GetInt 中,return i 将返回值副本(10)准备好后,先执行 finally(B 处打印 11),再把返回值交给调用方,故 A 处为 10。值类型返回不受 finally 中对 i 的修改影响。
9.3 答题示例
“在执行
GetInt()时,finally块会在返回前执行,所以先在 B 处打印,输出11,然后方法返回原始i值10,最后在 A 处打印10。”
9.4 关键词联想
- try-finally 执行顺序
- return 前执行 finally
- 值类型返回拷贝
- finally 对返回值无影响
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com