且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

有return的情况下try catch finally的执行顺序

更新时间:2022-08-15 14:50:45

背景:

         昨天一个朋友出去面试,遇到这么一道题:“C#  catch里有return,finally里还执行吗?”

个人实践小结:

        1、不管有木有出现异常,finally块中代码都会执行
        2、当try和catch中有return时,finally仍然会执行。    

具体案例如下(此处以没有返回值的函数进行验证):

        有return的情况下try catch finally的执行顺序

       3、如果是值传递,finally中改变的值对try或catch块中return返回的值无影响如果是引用类型参数(地址传递或对象),finally中的值改变对return会产生影响

具体案例:

      引用案例--数组类型:

有return的情况下try catch finally的执行顺序

        值案例--int类型:

有return的情况下try catch finally的执行顺序

        思考:string类型属于引用类型,那么它的返回值会受到finflly的影响吗?还是来看案例吧-----其实string与int类型的表现一样,不会受到finally的影响:

有return的情况下try catch finally的执行顺序

        思考:那么在finally中加上return,会产生什么影响呢?有图有真相:

有return的情况下try catch finally的执行顺序

        可见,finally中是不允许出现return的,否则连编译都过不去。