代码改变世界

Try catch finally 执行顺序小结

2010-06-18 10:33  ☆冷枫☆  阅读(3703)  评论(0编辑  收藏  举报

       try、catch、finally结构体在我们的程序中用的比较多,但对于他们的执行顺序我想了解的人并不是很多。下面我们就来具体的测试一下它执行的顺序,一起去探讨了解一下吧。     

    测试方法1:
    public static int Test1()
    {
        int count= 1;
        try
        {
            return ++count;
        }
        finally
        {
            ++count;
            Console.WriteLine("finally-value:" +count);
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Main-value:" + Test1());
    }
运行结果:
finally-value:3
Main-value:2

 

 

测试方法2:
    public static int Test2()
    {
        int count= 1;
        try
        {
            throw new Exception();
        }
        catch
        {
            return ++count;
        }
        finally
        {
            ++count;
            Console.WriteLine("finally-value:" +count);
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Main-value:" + Test2());
    }


运行结果:
finally-value:3
Main-value:2

 

 

测试方法3:
    public static int Test3()
    {
        try{}
        finally
        {
            return 1;
        }
    }

运行结果:
出现编译错误,错误信息"控制不能离开 finally 子句主体"。

 

 

由测试得到的结论:

1.不管是否异常,finally块中的语句都会执行;
2.当try或catch块中有return语句时,finally块中的语句仍会执行;
3.finally块中的语句是在函数返回前执行的,但函数返回值是在finally块中语句执行前确定的;
4.finally块中不能包含return语句。