try catch和finally块的执行顺序

2024-01-02

我对 try、catch 和 finally 块执行的顺序感到困惑。

我还想知道什么时候应该使用try-catch块以及应该在try-catch块中放入什么? 我还想知道 try 块中是否出现了一些异常,那么如果采取了与 try 块相对应的操作,那么首先执行 catch 还是finally(始终要执行)? 这两个执行后,控制权返回到 try 块还是离开它?


如果你有 (note:这不是有效的 C#,请参阅下面的有效示例):

try {
   // ... some code: A
} catch(...) {
   // ... exception code: B
} finally {
   // finally code: C
}

代码A将被执行。如果一切顺利(即A执行时没有抛出异常),它将进入finally,因此代码C将被执行。如果A执行时抛出异常,则异常会转到B,最后转到C。

作为示例,以下是来自以下位置的有效 C# 代码块:http://msdn.microsoft.com/en-us/library/dszsf989.aspx http://msdn.microsoft.com/en-us/library/dszsf989.aspx:

public class EHClass
{
    void ReadFile(int index)
    {
        // To run this code, substitute a valid path from your local machine
        string path = @"c:\users\public\test.txt";
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        char[] buffer = new char[10];
        try
        {
            file.ReadBlock(buffer, index, buffer.Length);
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
        }
        finally
        {
            if (file != null)
            {
                file.Close();
            }
        }
        // Do something with buffer...
    }
}

使用 try/catch/finally 的原因是为了防止某些代码出现错误(上例中的 A)时程序失败。如果有问题可以使用catch捕获问题并执行一些有用的操作,例如通知用户、将异常记录到日志文件、重试或尝试其他您认为可能有效的操作,而不是您最初尝试的操作。

finally用于确保执行一些清理工作。例如。在 A 中,您可能会尝试打开一个文件并读取它。如果打开成功,但读取失败,则会有一个打开的文件悬空。在这种情况下,您希望将其关闭,您可以这样做finallyblock - 该块总是被执行,保证文件的关闭。

请查看此处了解更多信息:

  • http://msdn.microsoft.com/en-us/library/0yd65esw.aspx http://msdn.microsoft.com/en-us/library/0yd65esw.aspx
  • http://www.c-sharpcorner.com/UploadFile/puranindia/75/Default.aspx http://www.c-sharpcorner.com/UploadFile/puranindia/75/Default.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

try catch和finally块的执行顺序 的相关文章

随机推荐

  • R magick:方形裁剪和圆形蒙版

    目的是 将任何输入图像转换为正方形长宽比并且 添加圆形蒙版并用白色或透明填充外部 我有 1 个工作要做 但不确定这是最好的方法 这是一个工作示例 library magick path lt https cdn pixabay com ph
  • WKWebView 是否使用 Safari 的 cookie?

    根据苹果文档 cookie 在所有应用程序之间共享 并跨进程边界保持同步 但有这个iOS Note iOS 中的应用程序之间不共享 Cookie 所以基本上我不能在我的应用程序中使用 Safari 的 cookie iOS 安全沙箱禁用应用
  • ZF2 SessionManager 用法

    我是 ZF2 的新手 不太习惯如何做事 我想使用会话来跟踪用户 记住我 我在课堂上有这样的代码 sessionManager new Zend Session SessionManager sessionManager gt remembe
  • 聚合物纸张输入和表格提交

    我正在开发论坛主题并开始使用 Web 组件 但表单元素不起作用 我有这样的东西
  • Mac QuickTime 组件调试

    首先 我是Mac编程的新手 我已经下载了马卡姆项目 http webcam osx sourceforge net index html并使用 Xcode 4 1 成功将调试版本编译为 32 位代码 输出是一个 QuickTime 组件 我
  • 如何读取作为 Blob 文件存储在 Azure 存储中的 Excel 文件

    我想使用 C 中的 Epplus 包读取作为 Blob 存储在 Azure 存储容器中的 Excel 文件 我尝试用这段代码做一些事情 string uri blob Uri AbsoluteUri FileInfo fileInfo ne
  • 如何在 CLR 存储过程中使用实体框架?

    我期待将所有逻辑 作为操作 Entity Framework 4 对象实现 移至服务器端 它看起来会很简单 由于应用程序结构 并且有益 因为我只有一台旧笔记本电脑作为客户端和一台运行 SQL Server 2008 的强大服务器 并且为逻辑
  • 在 Java 中存储颜色 - byte;byte;byte 与 byte[3] 与 int

    我需要存储大量 RGB 颜色对象 对于一些常见用途 它们占用了我的应用程序总内存的 8 到 12 我目前将其定义如下 class MyColor byte red byte green byte blue 我假设 大多数 JVM 实际上对每
  • Python:如何在列表中查找重复项并通过添加渐进字母重命名它们来更新这些重复项

    我有一个这样的项目列表 T1 T2 T2 T2 T2 T3 T3 我需要确保重复项被重命名并添加了渐进字母 如下所示 T1 T2A T2B T2C T2D T3A T3B 但前提是同一项目出现超过 1 次 另外 是否可以在不生成新列表的情况
  • Code::Blocks 无法编译应用程序

    这是我的你好世界代码 include
  • Mongoid 和 has_secure_password

    我正在尝试使用 mongoid 而不是活动模型来使用 Rails 3 1 身份验证 class User include Mongoid Document include ActiveModel SecurePassword has sec
  • 在哪里可以找到 Oracle JVM 的默认 -Xss(堆栈大小)值?

    有没有人找到过列出默认值的单个 JVM 文档 Xss不同版本的 Oracle JVM 和不同操作系统的值 我已经能够在中找到这张表jrockit 文档 http download oracle com docs cd E13150 01 j
  • 单例组件不能依赖于作用域组件

    在工作的同时Android应用程序使用Dagger2用于定义时的依赖注入Dagger组件我收到此错误 Error 13 1 error This Singleton component cannot depend on scoped com
  • 实现 copy.deepcopy() 克隆函数

    仅用于教育目的 我正在尝试实现一个克隆功能copy deepcopy 经过一些有趣的代码玩弄和谷歌搜索后 我想出了以下函数 def my deepcopy data if isinstance data dict result for ke
  • 为什么里氏代换原理需要论证是逆变的?

    其中一项规则是里氏替换原则 https en wikipedia org wiki Liskov substitution principle施加在派生类中的方法签名是 子类型中方法参数的逆变 如果我理解正确的话 就是说派生类的重写函数应该
  • 如何设置JQGRID ROW背景颜色?

    我想根据条件设置 JQGRID 行 bgcolor 怎么做 我正在使用 php 提前致谢 look at jqGrid 根据单元格值对网格中的整行进行着色 https stackoverflow com questions 2931732
  • 使用 REST API 将测试结果与测试用例链接起来

    我们使用 cypress 为 Web 应用程序实现了 UI 测试 并且它们在 Azure DevOps 中的发布管道上执行 我们需要将 ui 测试和测试结果与测试计划中定义的测试用例链接起来 为了将 ui 测试与测试用例链接起来 我们使用
  • 什么是MySQL排序规则,如何在实践中使用它?

    假设我想用 4 种语言用一些奇怪的语言制作一个搜索引擎 英语 瑞典 希伯来语 阿拉伯 我如何在 MySQL 中设置排序规则 排序规则定义 用于存储字符的字符集 UTF 8 ISO 8859等 排序和呈现规则 如果您想要不同的语言 正如您提到
  • DXF文件块中的polyLines顶点和点之间有什么关系?

    DXF文件块中的折线和点之间有什么关系 如果我提供档差表文件 如何连接它们 另一个问题 缩放点太少 所以效果不好 如下图所示 作为第一种答案 如果缩放点太少 是否需要在两个已知缩放点形成的圆弧上生成新的缩放点 不存在这样的关系 DXF 格式
  • try catch和finally块的执行顺序

    我对 try catch 和 finally 块执行的顺序感到困惑 我还想知道什么时候应该使用try catch块以及应该在try catch块中放入什么 我还想知道 try 块中是否出现了一些异常 那么如果采取了与 try 块相对应的操作