如何:使用 finally 执行清理代码
来源:互联网 发布:知乎匿名 编辑:程序博客网 时间:2024/05/22 17:20
finally 语句的目的是确保即使在引发异常的情况下也能立即进行必要的对象(通常是正在占用外部资源的对象)清理。此类清理功能的一个示例是在使用后立即对 FileStream 调用 Close,而不是等待公共语言运行库对该对象进行垃圾回收,如下所示:
C#
复制代码
static void CodeWithoutCleanup(){ System.IO.FileStream file = null; System.IO.FileInfo fileInfo = new System.IO.FileInfo("C://file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); file.Close();}
示例
为了将上面的代码转换为 try-catch-finally 语句,需要将清理代码与工作代码分开,如下所示。
C#
复制代码
static void CodeWithCleanup(){ System.IO.FileStream file = null; System.IO.FileInfo fileInfo = null; try { fileInfo = new System.IO.FileInfo("C://file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); } catch(System.Exception e) { System.Console.WriteLine(e.Message); } finally { if (file != null) { file.Close(); } }}
因为在 OpenWrite() 调用前,try 块内随时都有可能发生异常,OpenWrite() 调用本身也有可能失败,所以我们无法保证该文件在我们试图关闭它时处于打开状态。finally 块添加了一项检查,以确保在调用 Close 方法前 FileStream 对象不为 null。如果没有 null 检查,finally 块可能引发自身的 NullReferenceException,但是应当尽可能避免在 finally 块中引发异常。
在 finally 块中关闭数据库连接是另一个不错的选择。因为有时候数据库服务器允许的连接数是有限的,所以尽快关闭数据库连接很重要。在由于引发了异常而无法关闭连接的情况下,使用 finally 块也是比等待垃圾回收更好的一种选择。
- 如何:使用 finally 执行清理代码
- 使用 finally进行清理
- try与finally一起使用时,try语句发生异常,如何继续执行代码到finally语句块
- finally代码执行的情况
- 使用using或try/finally清理内存
- finally代码块中的代码什么时候执行
- 包含finally的异常代码块里的return,break,continue语句如何执行
- try,catch,finally中的return如何影响代码的执行语序
- finally块中的代码一定执行吗
- finally块中的代码一定执行吗
- Java try-catch-finally 代码执行顺序
- java Finally块中代码什么时候执行
- finally块中代码的执行
- finally{}代码块比return先执行
- finally代码块一定会执行吗?
- finally之后的代码是否执行
- Java控制台程序如何在用户关闭时执行清理代码
- C# 使用Using和Try/Finally 进行资源清理
- 探究 Web 页面之间的可视化关系
- 资料下载
- 直方图我的算法
- ActiveMQ 启动Broker
- struts 中 action 的重用
- 如何:使用 finally 执行清理代码
- "finally"使用注意
- 唉,命苦啊!
- Dataformatstring属性设置(详解)
- 一般人没有办法突破的首要原因---陈安之的一些激励文章
- 一般人为什么会3 分钟热度?---陈安之的一些激励文章
- Tomcat上配置SMTP
- 假如过程不快乐,到达目的地也没有用---陈安之的一些激励文章
- 股票开户流程