1基本信息
摘要:本文倡导一种对异常条件本质的思考方式,并描述一些有助于设计的模式。最后,本文还将在
AOP 模型中,作为相互渗透的问题,来讨论异常的处理。当你能正确使用异常时,它们会有极大的好处。
本文将帮助你做到这一点。
2为何异常是如此重要
Java 应用中的异常处理在很大程度上揭示了其所基于架构的强度。架构是在应用程序各个层次上所
做出并遵循的决定。其中最重要的一个就是决定应用程序中的类,亚系统,或层之间沟通的方式。Java
异常是 Java 方法将另类执行结果交流出去的方式,所以值得在应用架构中给予特殊关注。
一个衡量 Java 设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码。首
先要注意的是有多少代码用于捕获异常,写进日志文件,决定发生了什么,和在不同的异常间跳转。干净,
简捷,关联性强的异常处理通常表明开发团队有着稳定的使用 Java 异常的方式。当异常处理代码的数量
甚至要超过其他代码时,你可以看出团队之间的交流合作有很大的问题(可能在一开始就不存在),每个
人都在用他们自己的方式来处理异常。
对突发异常的处理结果是可以预见的。如果你问问团队成员为什么异常会被抛出,捕获,或在特定的
一处代码里忽视了异常的发生,他们的回答通常是,“我没有别的可做”。如果你问当他们编写的异常真的
发生了会怎么样,他们会皱皱眉,你得到的回答类似于这样,“我不知道。我们从没测试过。”
你可以从客户端的代码判断一个 java 的组件是否有效利用了 java 的异常。如果它们包含着大堆的逻
辑去弄清楚在何时一笔操作失败了,为何失败,是否有弥补的余地,那么原因很有可能要归咎于组件的报
错设计。错误的报错系统会在客户端产生大量的“记录然后忘掉”的代码,这些代码鲜有用途。最差的是弄
拧的逻辑,嵌套的 try/catch/finally 代码块,和一些其他的混乱而导致脆弱而难于管理的应用程序。
事后再来解决 Java 异常的问题,或根本就不解决,是软件项目产生混乱并导致滞后的主要原因。异
常处理是一个在设计的各个部分都急需解决的问题。对异常处理建立一个架构性的约定是项目中首要做出
的决定。合理使用 Java 异常模型对确保你的应用简单,易维护,和正确有着长远的影响。
3解析异常
正确使用 Java 异常模型所包含的内容一直以来有着很大的争议。Java 不是第一种支持异常算法语义
的;但是,它却是第一种通过编译器来执行声明和处理某些异常的规则的语言。许多人都认为编译时的异
常检查对精确的软件设计颇有帮助。图 1 显示的 Java 异常的等级。