• try catch finally与return的执行顺序


    测试1:
        public static int test1()
        {
            int i = 1;
            try
            {
                return ++i;
            }
            finally
            {
                ++i;
                Console.WriteLine("finally:" + i);
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Main:" + test1());
        }
    结果:
    finally:3
    Main:2


    测试2:
        public static int test2()
        {
            int i = 1;
            try
            {
                throw new Exception();
            }
            catch
            {
                return ++i;
            }
            finally
            {
                ++i;
                Console.WriteLine("finally:" + i);
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Main:" + test2());
        }
    结果:
    finally:3
    Main:2


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

    结果:
    编译错误,控制不能离开 finally 子句主体。


    结论:

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

  • 相关阅读:
    MySQL用户信息表中主键userID自动增加问题
    PHP输出当前系统时间
    PHP连接MySQL方式比较问题
    DWZ分页处理
    NHibernate ICriteria 查询[转 十年如一]
    HttpContext.Current.Request.Files后台取不到值的解决方法 [转]
    Hibernate Projections(投影、统计、不重复结果)[转]
    细说Form(表单)[ 转 Fish Li]
    HTML <a> 标签的 rel 属性
    dwz rel
  • 原文地址:https://www.cnblogs.com/chenwx/p/1425629.html
Copyright © 2020-2023  润新知