0

我想找出“return”和“finally”关键字之间的关系。什么是执行顺序以及发生异常并在代码块执行某些操作后调用 return 关键字时会发生什么情况,如果有两个嵌套的 finally 块,如下所示,

        try
        {
            try
            {

            }
            catch (Exception)
            {
                //do some stuff
                return;
            }
            finally
            {

            }
        }
        catch (Exception)
        {

        }
        finally
        {

        }
4

6 回答 6

5

来自MSDN

通常,finally块的语句在控制离开 try 语句时执行,无论控制转移是由于正常执行、执行breakcontinuegotoreturn语句,还是传播异常而发生出 try 语句。

在您的示例中,两个finally块都将执行。内部的将首先执行,然后外部的 finally 将执行。

于 2013-09-19T06:43:44.263 回答
1

不管发生什么,finally块都会被执行。就return而言,如果try块包含return,它实际上会做一些事情,比如将它存储在某个变量中,并在 finally 块执行后在最后返回它。像这样:

try{
    return xyz; //(i.e, temp = xyz;)
    }
catch() {}
finally {}
return temp;
于 2013-09-19T06:54:32.893 回答
0

finally意味着无论发生什么都运行这段代码

任何可能意味着returncatch

于 2013-09-19T06:43:54.833 回答
0

最后总是被执行。无论您是否遇到异常,您的 finally 块都会执行。在您的情况下,您的两个 finall 块都将被执行。

于 2013-09-19T06:52:03.817 回答
0

如果内部 try 块中发生错误,控制将转到内部 catch 块,然后是内部 finally,然后是外部 finally,然后返回您在内部 catch 块中执行的值。

尝试调试代码,您将获得流程

于 2013-09-19T06:54:18.883 回答
0

即使出现异常,finally 块也将始终执行。要理解考虑下面的代码

    try
    {
    //sql connection opened
    //execute a query ----> EXCEPTION OCCURRED HERE 

//return the result
    }catch(Exception ex)
    {
    throw ex;
    }
    finally{
    //close the connection
    }

上面是演示 finally 块广泛使用场景的代码。即使在执行查询时发生异常,也必须关闭与数据库的连接。

如果没有异常,那么 finally 块也将执行,然后将返回结果

于 2013-09-19T06:54:27.043 回答