我想找出“return”和“finally”关键字之间的关系。什么是执行顺序以及发生异常时会发生什么,并且在代码块执行某些操作后调用return关键字,如果有两个嵌套的finally块,如下所示,
try
{
try
{
}
catch (Exception)
{
//do some stuff
return;
}
finally
{
}
}
catch (Exception)
{
}
finally
{
}
答案 0 :(得分:5)
来自MSDN:
通常,当控制离开try语句时执行 finally 块的语句,是否由于正常执行而发生控制转移,执行中断,继续,转到,或返回声明,或例外传播出来的try语句
在您的示例中,两个finally
块都将执行。内部将首先执行,然后外部将最终执行。
答案 1 :(得分:1)
无论发生什么,终于块都将被执行。 就返回而言,如果尝试块包含返回,它实际上会执行类似将其存储在某个变量中的操作,并返回最后,在执行finally块之后。像这样:
try{
return xyz; //(i.e, temp = xyz;)
}
catch() {}
finally {}
return temp;
答案 2 :(得分:0)
finally
表示运行此代码 发生
无论是什么意思return
或catch
答案 3 :(得分:0)
最后总是被执行。无论您是否获得异常,您的finally块都将执行。在你的情况下,你的两个finall块都会被执行。
答案 4 :(得分:0)
如果内部try块发生了一些错误,控件将转到内部catch块,然后是内部finally,最后是外部,然后返回你在内部catch块中所做的值。
尝试调试代码,您将获得流程
答案 5 :(得分: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块也会执行,然后返回结果