下面是我的测试程序,测试结果为,在return之后执行final语句。
public class Test
{
public String Test1()
{
String str = "aa ";
try
{
str = "bb";
return str;
}
finally
{
str = "yy";
Console.WriteLine(str);
}
}
}
class Program
{
static void Main(string[] args)
{
Test te = new Test();
Console.WriteLine(te.Test1());
}
}如果在final语句模块在return之前执行,那么输出应该是"yy","yy",但实际输出结果为"yy","bb"。也就是return先将"bb"返回,然后再执行的final模块,显示"yy",最后执行main函数中的语句,显示"bb".
public class Test
{
public String Test1()
{
String str = "aa ";
try
{
str = "bb";
return str;
}
finally
{
str = "yy";
Console.WriteLine(str);
}
}
}
class Program
{
static void Main(string[] args)
{
Test te = new Test();
Console.WriteLine(te.Test1());
}
}如果在final语句模块在return之前执行,那么输出应该是"yy","yy",但实际输出结果为"yy","bb"。也就是return先将"bb"返回,然后再执行的final模块,显示"yy",最后执行main函数中的语句,显示"bb".
return 前
自己debug下
会执行。
貌似无论执行try还是catch,都会执行finally,finally在return后会继续执行、、
自己网上搜也是一大堆、、、
但是会在最后执行,打个必然你这个方法是string类型的,那等程序已经算出return的东西后,他将return的东西先在边上放一下(内存中暂时存一下),然后将finally放最后执行掉,这样整个方法已经完成,最终返回内存中暂存的东西
public class Test
{
public String Test1()
{
String str = "aa ";
try
{
str = "bb";
return str; // 0 此时执行了return 语句返回值已经确定了,但是该方法还没有执行完毕,
// 外界还不能访问返回值 或者说 还得不到返回值
}
finally
{ //1
str = "yy"; // 2
Console.WriteLine(str);// 3
} //4
} //5 到此方法执行完毕,外界才可以去访问此方法的返回值 }还有返回类型如果是 引用类型的 返回的是一个指向特定内存地址的指针、而一个指针就是一个整数,但是如果是值类型的返回的是确切的数据。在当前例子中,返回值是string值类型,第零步操作已经确定了返回值,第二步执行的操作 str = "yy"; 对外是不可以见的,因此方法体外得到的实际数据为:BB,但是如果返回值类型是引用类型则方法体外得到实际数据为 "yy".自己的一点见解 不知对否、望大侠们莫笑。
执行顺序:1、te.Test1() 2、Console.WriteLine
te.Test1() 执行顺序,1、return 2、finally