9.3 真实世界中的异常处理
异常是一种很好的错误报告和错误处理机制(不是在单个代码片段中,而是作为大型架构的一部分)。一般来说,异常不应替代检查一个局部错误条件(尽管有些开发人员会这样使用异常)。
例如,如果对一个文件名不确定,一般认为在打开文件前检查文件是否存在比使用异常处理文件缺失的情况要好。不过,在向文件写入内容之前检查磁盘空间是否足够,这种检查在所有地方都做意义不大,因为这种情况极为罕见。
一种说法是,程序应该检查常见的错误条件,而把不常见和意外的错误留给异常处理机制。当然,这两种情况的界限往往很模糊,不同的开发人员会有不同的判断方法。
如果你让不同的类和模块相互传递错误条件,那么这里你应该使用异常。与使用异常相比,返回错误代码极其繁琐且容易出错。引发异常在组件或库类中比在事件处理程序中更为常见。
相反,在日常代码中极为重要和常见的是使用finally代码块来保护异常发生时的资源。您应始终使用 finally 语句保护引用资源的代码块,以避免在出现异常时发生资源泄漏。每次在单个函数或方法中打开和关闭、连接和断开、创建和销毁某些内容时,都需要使用 finally 语句。最后,finally 语句能让程序在出现异常时保持稳定,允许用户继续使用或(在出现更严重问题时)有序关闭应用程序。