最近在网上看了一些文章,关于处理异常的。
1,
对异常处理的三个原则,具体,早抛,晚处理,
(
http://today.java.net/pub/a/today/2003/12/04/exceptions.html
)
2,
使用错误代号
(
http://www-106.ibm.com/developerworks/java/library/j-ejbexcept.html
)
3,
使用运行时异常
(
http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html
)
这三个原则是很有道理的。
1,
在一些书上说,异常要早处理,因为
VM
维护异常栈,要浪费性能。但异常之所以为异常,发生的频率应该不高。早处理的问题是,基本处理不了。因为目前常见的处理异常方式,日志
+
消息,日志可以底层记录,但消息却只能在高层处理。
2,
使用错误代号
,
这一点很有趣,让人联想
MS
的某某错误代号。使用代号,有利于维护一个异常库,国际化也比较方便一点。
3,
使用运行时异常,有利于代码封装,其实比较危险,但我们却可以限制它使用的范围来降低风险。
下面要讨论的处理异常方法就是基于以上三点的。同时我们假设系统是层次分明的,如果系统层次都不分明,讨论异常处理是没有意义的。以下是一个简单的架构分层结构
(Service proxy, BU, Util)
,初始化和请求过程。
1,
首先我们对异常分类。以引发原因异常可以分为内部异常
(
系统内
)
和外部异常。内部异常主要是开发过程中不太可能发生的异常和系统维护配置出错导致的异常,比如
ResourceLoader
读取配置文件失败,配置文件的
XML
格式不对,
ElementProcessor
解析验证失败。这一类异常通常都是
Fatal
的。
外部异常主要是不恰当的用户调用,网络不可达等。比如用户输入格式不对,数据库服务器无法连接。
2,
根据系统的层次,为每一层新建相应的异常。这里的层次,更有一点功能内聚的模块的意思。不管是业务的还是底层
Util
的,每一层最好只有一个异常类。
4,
穷举系统内的异常。为这些异常在相应模块异常上新建或归入某一个错误代码中。这一步是随着系统开发迭代。
我们以
ResourceLoader
来详细说明一下。
对于
loadPlainResource()
方法来说,内部可能有的异常包括了
FileNotFoundException, IOException,
对于
loadXmlResource()
因为其返回为
Document
,所以还有关于
JAXP
或
JDOM
的异常。
ResourceException
|
Code
|
Message
|
RESOURCE_NOT_FOUND
|
001
|
File not found
|
RESOURCE_READ_FAILED
|
002
|
Read file failed
|
RESOURCE_INVALID_FORMAT
|
003
|
XML format not right
|
随着开发的向前推进,会不断有新的异常加入到这张表。
我们同时还要处理的是高层的异常转译,比如
ResourceException
的
3
个异常类可能只对应
BusinessException
中的一个映射,资源不可达
ESOURCE_UNREACHABLE
。
层次越高,异常越可读。
基于上面的异常类,我们可以定义如下的处理规则。
1,
Service
层,抛
BusinessException
。因为只有更上层的才有能力处理异常,
把异常信息返回给客户。
2,
BU
层
,
只抛
(
具体的
)BusinessException
。对于底层的异常,补获,转译
,
抛出。
3,
Util
层,统一转译异常。
对
2
的解释,取决于模块间的调用,究竟能不能控制在
Service
层。如果在
BU
层调用其它的
Service
那就只能把抛出的异常放开到
BusinessException
了。
写完了,连自己都很乱.
下周SCJP后,再改
分享到:
相关推荐
在实验过程中,教师可以引导学生思考实验中出现的异常现象,鼓励学生提出自己的见解,从而提升他们的科学探究能力和实践技能。 综上所述,通过选用更适合的实验器材,改进测量方法,并对实验数据进行科学处理,可以...
年关将至,对于大部分程序员来说,...因为对于实现一个功能来说,实现功能的核心代码是一样的,可能只是在写法上优化而已,但是在实现某一个操作上使用的类来说,这一点是绝大多数时候是一样的。这样看来,我们在实际开
4. **CEO角色与公关策略**:文中批评了中国一些互联网公司的CEO亲自参与骂战,反映出企业法务和公关部门在处理危机时的能力不足,以及企业领导者对公共形象和资源分配的不当管理。 5. **法律意识的缺失**:文章指出...
一、什么是异常处理 定义:异常处理就是我们在写Python时,经常看到的报错信息,...就如我们使用的工具出现了一点毛病,我们可以想办法修理好它,程序也是一样,之前的前辈们经过不断的积累与思考,创造了很多好得方法
这包括对边界值、压力测试、性能测试等不同测试类型的运用,以及对错误处理和异常流程的深度验证。 再者,测试人员应具备创新思维。他们需要不断探索新的测试方法和技术,如自动化测试、持续集成和持续测试,以提高...
这可能是自定义的异常类,用于捕获和报告文件上传过程中可能出现的问题,如文件过大、格式不正确或服务器存储空间不足等。 在实际应用中,使用`multipart/form-data`进行文件上传时,开发者需要注意以下几点: - ...
4. **异常处理**:通过try-catch-finally语句,学习如何捕获和处理程序运行时可能出现的错误,以提高程序的健壮性。 5. **泛型**:C#中的泛型允许创建可重用的类型,可以应用于多种数据类型,提高了代码的灵活性和...
这种不完全规则性给计算机理解和生成自然语言带来了困难,因为它需要处理大量异常情况和特殊情况。 其次,语言的递归性是其另一个显著特征。递归是指在一个结构中嵌套相同类型的结构,使得语言能够构造出无限数量的...
文件名“分析思考船舶发电机智能故障诊断系统.pdf”进一步证实了这一点,这可能是一个详细的报告或学术文章,详细探讨了该领域的理论、方法和技术。 在IT领域,智能故障诊断系统通常基于以下几个关键知识点: 1. ...
5. **控制流**:条件语句(if...else)、switch、循环(for、while、do...while、for...of、for...in)、break和continue、异常处理(try...catch...finally)。 6. **异步编程**:事件循环、回调函数、Promise、...
其次是计算能力的大幅提升,特别是GPU(图形处理单元)的发展,使得对海量数据的处理成为可能;最后是算法的不断优化,包括反向传播算法、卷积神经网络等,这些算法的出现大大提升了深度学习模型的性能。 深度学习...
本文将通过分析一起发热休克患者的案例,探讨信息技术如何在医疗行业中发挥其作用,并引发我们对这些技术运用的深入思考。 首先,数据采集与分析是医疗诊断的基础。在这例发热休克患者案例中,医生首先收集了患者的...
在处理各种故障和异常情况时,合理的保护策略和高效的继电保护设备是保证发电机及整个电网安全稳定运行的关键。这需要电力工程师不仅对发电机的保护原理有深刻理解,还必须能灵活运用先进的保护技术和智能算法,以...
为了保持接口响应的一致性,可以使用Spring MVC的统一异常处理和返回结果格式。定义一个通用的响应模型,包含状态码、消息和数据字段,确保所有接口返回的数据结构相同,方便客户端处理。 7. **监控与日志管理** ...
处理该事件的步骤包括发现异常、报告问题、紧急响应、执行回滚或补救措施等。这一系列操作均有条不紊地进行,充分体现了我们团队的技术能力和应对突发事件的专业素养。报告中提及的处理和组织指挥人员应作为成功处理...
这一点,无论对个人成长,还是对高中语文教学,都有着深远的启示作用。 在高一语文期末试题的阅读理解部分,试卷设计者巧妙地将蒙田的《热爱生命》作为阅读材料,让学生通过阅读与思考,掌握如何分析和评价作者的...
异常处理是保证程序健壮性的关键,它能够帮助程序在出现错误或异常情况时,进行正确的处理而不至于崩溃。Java提供了一套丰富的异常处理机制,支持异常捕获和抛出,使得开发者能够编写出更为安全的代码。 集合框架是...
随着大数据技术的发展,数据规模变得异常庞大,数据类型日益丰富,而人工智能技术的发展则使得大数据的处理变得更加高效、智能化。 首先,大数据技术的出现对数据处理的要求提出了新的挑战。大数据的特性包括数据量...
书中讨论了如何有效地使用C++的异常处理机制,包括抛出异常的最佳实践和如何优雅地处理异常。 ##### 4. 内联函数与虚析构函数 - **内联函数**:可以提高性能但可能会增加代码大小。书中指出了使用内联函数的利弊,...
4. **异常处理**:理解易语言中的异常处理机制,如何引发和捕获错误,以及如何在程序中添加错误处理代码,防止实际应用中出现未预期的蓝屏情况。 5. **内存操作**:高级一点的蓝屏模拟可能涉及对内存的直接操作,这...