首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try/catch/finally中的"finally“的用途是什么

try/catch/finally中的"finally“的用途是什么
EN

Stack Overflow用户
提问于 2013-05-23 10:32:12
回答 10查看 6.7K关注 0票数 30

不同语言的语法会有所不同,但这是一个一般性问题。

这和……有什么区别?

代码语言:javascript
复制
try
{
     Console.WriteLine("Executing the try statement.");
     throw new NullReferenceException();
}
catch (NullReferenceException e)
{
     Console.WriteLine("{0} Caught exception #1.", e);
}       
finally
{
     Console.WriteLine("Executing finally block.");
}

还有这个..。

代码语言:javascript
复制
try
{
    Console.WriteLine("Executing the try statement.");
    throw new NullReferenceException();
}
catch (NullReferenceException e)
{
    Console.WriteLine("{0} Caught exception #1.", e);
}        
Console.WriteLine("Executing finally block.");

我一直看到它被使用,所以我认为最后使用它有一个很好的理由,但我不能弄清楚它与仅仅将代码放在语句后面有什么不同,因为它仍然会运行。

有没有最终不能运行的场景?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-05-23 10:37:26

在您的示例中,这并没有太大的不同。

不过,想象一下:

代码语言:javascript
复制
    try
    {
        Console.WriteLine("Executing the try statement.");
        throw new NullReferenceException();
    }
    catch (SomeOtherException e)
    {
        Console.WriteLine("{0} Caught exception #1.", e);
    }       
    finally
    {
        Console.WriteLine("Executing finally block.");
    }

    Console.WriteLine("Executing stuff after try/catch/finally.");

在这种情况下,catch不会捕获错误,因此在整个try/ catch /finally之后的任何内容都将永远不会到达。但是,finally块仍将运行。

票数 38
EN

Stack Overflow用户

发布于 2013-05-23 10:37:42

代码语言:javascript
复制
try
{
    throw new Exception("Error!");
}
catch (Exception ex)
{
    throw new Exception(ex, "Rethrowing!");
}
finally
{
    // Will still run even through the catch kicked us out of the procedure
}

Console.WriteLine("Doesn't execute anymore because catch threw exception");
票数 13
EN

Stack Overflow用户

发布于 2013-05-23 10:42:34

这真的要看情况了--其他一些答案有很好的理由使用Finally块。但我认为最好的原因是因为您正在进行异常处理。您在Finally块中所做的事情通常涉及清理资源以确保正确继续,而不管是否抛出异常-对我来说,这仍然是异常处理的一部分,至少是“尝试某些东西”操作的一部分。

Finally作用域强调了这样一个事实,即它的代码中包含了在发生异常时需要特别注意的内容。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16704729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档