当前位置: 首页 > 知识库问答 >
问题:

尝试捕获最终阻止如何工作?

方安怡
2023-03-14

C# 中,尝试捕获最终阻止的工作原理是什么?

所以如果有例外,我知道它会跳到捕获块,然后跳到最后的块。

但是如果没有错误,catch块不会运行,但是finally块会运行吗?

共有3个答案

温凯
2023-03-14

< code>finally块将始终在方法返回之前执行。

试着运行下面的代码,你会注意到< code >控制台。< code>finally语句中的WriteLine("executed")在< code >控制台之前执行。WriteLine(RunTry())有机会执行。

static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
    Console.WriteLine(RunTry());
    Console.ReadLine();
}
public static int RunTry()
{
    try
    {
        throw new Exception();
    }
    catch (Exception)
    {
        return 0;
    }
    finally
    {
        Console.WriteLine("executed");
    }
    Console.WriteLine("will not be executed since the method already returned");
}

查看结果:

Hello World!
executed
0
缑兴贤
2023-03-14

是的,如果没有例外,则最后一个子句将被执行。举个例子

     try
        {
            int a = 10;
            int b = 20;
            int z = a + b;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            Console.WriteLine("Executed");
        }

所以这里假设发生了一个异常,最后也会被执行

狄兴业
2023-03-14

是的,无论是否有异常,最终块都会运行。

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ] --RUN ALWAYS
End Try

参见:http://msdn.microsoft.com/en-us/library/fk6t46tz(v=vs.80). aspx

 类似资料:
  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化:

  • 问题内容: 我有一个需要类似以下内容的场景 在我的尝试,我会,数据,将其与基于处理其他数据集。 在随后。有可能阻止吗?下面是伪代码: 问题答案: 无需创建表,您只需声明一个表变量(查询结束时该变量将自动消失)。

  • 问题内容: 我想在finally块中关闭流,但是它抛出一个,因此看来我必须在块中嵌套另一个块才能关闭流。这是正确的方法吗?似乎有点笨拙。 这是代码: 问题答案: 似乎有点笨拙。 它是。至少java7尝试使用资源可以解决该问题。 在java7之前,您可以创建一个吞咽它的函数: 或将try …最终放入try catch中: 它比较冗长,并且finally中的异常会在try中隐藏一个,但从语义上讲它更接

  • 问题内容: 发生异常后,我可以返回执行try块吗?(目标是写得更少)例如: 与 问题答案: 不,你不能那样做。这就是Python具有其语法的方式。一旦由于异常而退出try块,就无法返回。 那for循环呢? 但是请注意,裸露裸露是不明智的做法。您应该改为捕获特定的异常。我之所以这么做,是因为在不知道方法可能会抛出什么异常的情况下,这是我所能做的。

  • 我正在使用power shell控制台运行以下power外壳脚本: 这将打印错误。然后继续并打印“创建的新对象”和“结束”。所以我假设这是一个非终结性错误。 但是,如果我将try catch块放在新对象周围,如下所示: 在这种情况下,捕获块被击中并写入异常消息。 我的问题是: < li >这是一个非终止错误吗?这看起来像是一个非终止性错误,因为在错误之后继续执行(当没有try catch块时)。

  • 问题内容: 当try块中存在时,我对try- finally执行感到困惑。据我了解,finally块将始终执行,即在返回调用方法之前。在考虑以下简单代码时: 实际打印的结果为1。这是否意味着不执行finally块?有人可以帮我吗? 问题答案: 从块返回时,返回值存储在该方法的堆栈帧中。之后,将执行finally块。 更改finally块中的值不会更改堆栈中已存在的值。但是,如果您从finally块