对捕获异常、异常处理的理解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对捕获异常、异常处理的理解
要求:请阅读以下材料作答
程序可能按编程者的意愿终止,也可能因为程序中发生了错误而终止。例如,程序执行时遇到除数为0或下标越界,这时将产生系统中断,从而导致正在执行的程序提前终止。程序的错误有两种,一种是编译错误,即语法错误。如果使用了错误的语法、函数、结构和类,程序就无法被生成运行代码。另一种是在运行时发生的错误,它分为不可预料的逻辑错误和可以预料的运行异常。在编写程序时,应该考虑确定程序可能出现的错误,然后加入处理错误的代码。也就是说,在环境条件出现异常情况下,不会轻易出现死机和灾难性的后果,而应有正确合理的表现。
要求:
1、阐述如何捕获异常。
2、阐述异常处理的基本思想有哪些。
3、阐述异常处理的机制。
一、捕获异常:检查异常与非检查异常
检查异常对方法调用者来说属于必须处理的异常,当一个应用系统定义了大量或者容易产生很多检查异常的方法调用,程序中会有很多的异常处理代码。如果一个异常是致命的且不可恢复并且对于捕获该异常的方法根本不知如何处理时,或者捕获这类异常无任何益处,笔者认为应该定义这类异常为非检查异常,由顶层专门的异常处理程序处理;像数据库连接错误、网络连接错误或者文件打不开等之类的异常一般均属于非检查异常。这类异常一般与外部环境相关,一旦出现,基本无法有效地处理。
而对于一些具备可以回避异常或预料内可以恢复并存在相应的处理方法的异常,可以定义该类异常为检查异常。像一般由输入不合法数据引起的异常或者与业务相关的一些异常,基本上属于检查异常。当出现这类异常,一般可以经过有效处理或通过重试可以恢复正常状态。
由于检查异常属于必须处理的异常,在存在大量的检查异常的程序中,意味着很多的异常处理代码。另外,检查异常也导致破坏接口方法。如果一个接口上的某个方法已被多处使用,当为这个方法添加一个检查异常时,导致所有调用此方法的代码都需要修改处理该异常。当然,存在合适数量的检查异常,无疑是比较优雅的,有助于避免许多潜在的错误。
到底何时使用检查异常,何时使用非检查异常,并没有一个绝对的标准,需要依具体情况而定。很多情况,在我们的程序中需要将检查异常包装成非检查异常抛给顶层程序统一处理;而有些情况,需要将非检查异常包装成检查异常统一抛出。
二、理解异常从中找到处理方式
从应用系统最终用户的角度来看,用户所面对的是系统中所提供的各种业务功能以及系统本身的管理功能。用户并不理解系统内部是如何实现以及如何运行的,与系统开发者存在天然的鸿沟,系统运行对用户来说如同一个黑盒一样。对用户而言,系统所出现的任何异常或错误,都属于系统运行时异常。对于这些异常,有些异常是用户可以理解并能解决的;而另外一些异常是用户无法理解和解决的。当一个系统错误出现时,系统本身需要反馈给用户一种可理解的业务相近的信息,从而用户可以根据这些信息去尽可能解决问题。另一方面,有一类错误属于系统内部运行异常或错误,用户对此类错误根本无能为力。而这类异常同样需要提供足够详细的信息,系统管理员可根据这类异常尽可能解决。一般情况下,如果异常面向系统用户,以系统异常呈现更好。
从系统开发者角度来看,更多的是从系统内部逻辑来看异常。有一部分异常需要内部截获处理,而另外一部分异常对于异常产生源而言无法进行有效处理,从而需要向外抛出异常以待合适的调用者进行处理。对于开发者而言,需要预见异常,并且需要考虑何时处理异常,何时抛出异常,必要时以某种方式记录或通知异常。总而言之,开发者需要通过对系统运行时可能出现的异常尽可能地处理以保证系统的正常运行,并对于无法处理的异常以一种合适的方式记录、通知、呈现以便找到发生异常的原因,从而解决或避免异常。
三、异常处理机制
我们可以认为异常包含三部分:异常Service、异常处理过滤器、系统异常层次定义。
异常Service:整个异常框架的核心,通常用于主动拦截异常或被动调用处理异常。根据具体业务需要,调用通用服务程序进行一般化异常处理,如日志服务、异常消息通知服务等;另外,异常Service 最主要目的用于拦截并处理异常,其需要维护定制的异常处理器链,用于特定类型异常的特定处理。
异常处理过滤器:维护系统中各种异常处理器,包括增加异常处理器、删除异常处理器、查找异常处理器操作等。其中最主要的功能是接收特定异常并找到与之匹配的异常处理器进行处理。异常处理过滤器具体实现可以通过一个配置文件维护所有异常与异常处理器的映射,另外可以通过另外一个配置文件维护系统中所有已定义的异常处理器。从而,异常处理过滤器可以通过配置文件进行初始化操作。
异常层次定义:异常层次定义应用系统的异常基础结构,是异常处理过滤器所处理的目标异常类型集合。
异常处理机制是软件系统体系结构需要考量的很重要的一方面。好的异常处理机制既能条理清晰地处理异常,又能保证异常处理的可扩展性与可用性,最后还需要保证系统的性能不受额外的损失。