一、异常的好处
异常带来诸多好处。首先,它将错误处理代码从正常代码(normal code)中分离出来。你可以将那些执行概率为99.9%的代码封装在一个try块内,然后将异常处理代码置于catch子句中。这种方式的好处是,正常代码因此而更简洁。
如果你不知道如何处理某个方法中的一个特定错误,那么你可以在方法中抛出异常,将处理权交给其他人。如果你抛出一个检查异常(checked exception),那么Java编译器将强制客户程序员(cilent programmer)处理这个潜在异常,或者捕捉之,或者在方法的throws子句中声明之。Java编译器确保检查异常被处理,这使得Java程序更为健壮。
二、什么时候抛出异常
如果方法遇到一个不知道如何处理的意外情况(abnormal condition),那么它应该抛出异常。那么什么是意外情况呢?意外情况就是指方法的“正常功能”(normal functioning)之外的情况。
三、异常处理设计的准则
1、选择checked还是Unchecked的几个经典依据。
2、Exception的封装问题。
3、如果没有必要不要创建自己的Exception。
4、不要用Exception来作流程控制。
5、不要轻易忽略捕获的Exception。
6、不要简单的捕获最顶层的Exception.
四、举例说明(一)
public void exceptionTest1(){ try { ...some code that throws exceptions } catch (Exception ex){ ex.printStacktrace(); } }
那么大家可以看看,上面的代码有没有问题?
在回答以前让我们想想怎样才是正确的?是的,一旦程序碰到异常,它就该挂起程序而"做"点什么。那么上边的代码是这样子的么?看吧,它隐瞒了什么?它把所有的"苦水"往肚里咽(在控制台打印出异常信息),然后一切继续,从表面上看就像什么都没有发生过一样......,很显然,上边代码达到的效果并不是我们所期望的。所以不应该在catch语句中只在控制台打印异常信息。
那如果是以下这行代码呢?
public void someMethod() throws Exception {}
很显然这个方法体是空的。一个方法体是空的这个能抛出什么异常呢?当然JAVA语法中并没有规定这样写。
五、异常原理
大体上来说有“三种情况”会导致异常的抛出。
1、编程错误导致异常。
2、客户端调用引起的异常。
3、访问资源失败导致异常。
六、设计异常的最佳实践
1、当要决定是采用checked exception还是Unchecked exception的时候,你要问自己一个问题,"如果这种异常一旦抛出,客户端会做怎样的补救?"
如果客户端可以通过其他的方法恢复异常,那么这种异常就是checked exception;如果客户端对出现的这种异常无能为力,那么这种异常就是Unchecked exception;从使用上讲,当异常出现的时候要做一些试图恢复它的动作而不要仅仅的打印它的信息。
尽量使用unchecked exception来处理编程错误:因为unchecked exception不用使客户端代码显示的处理它们,它们自己会在出现的地方挂起程序并打印出异常信息。Java API中提供了丰富的unchecked excetpion,譬如:NullPointerException , IllegalArgumentException 和 IllegalStateException等,因此我一般使用这些标准的异常类而不愿亲自创建新的异常类,这样使我的代码易于理解并避免的过多的消耗内存。
2、保护封装性
不要让你要抛出的checked exception升级到较高的层次。
例如,不要让SQLException延伸到业务层。业务层并不需要(不关心?)SQLException。你有两种方法来解决这种问题。
转变SQLException为另外一个checked exception,如果客户端并不需要恢复这种异常的话;
转变SQLException为一个unchecked exception,如果客户端对这种异常无能为力的话;
代码如下所示:
public void exceptionTest2(){ try{ ..some code that throws SQLException }catch(SQLException ex){ throw new RuntimeException(ex); } }
以上是我在平时工作的经验总结,虽然看似简单但有时候在工作中,却难免有疏忽之举。
相关推荐
### Win32 系统级异常处理机制(S.E.H) #### 引言 在深入探讨Win32系统级异常处理机制(S.E.H)之前,有必要先了解这一机制的重要性和独特之处。S.E.H(Structured Exception Handling)是Windows操作系统中用于...
"Java语言常规编程特性浅淡" 本文将详细介绍Java语言的常规编程特性,从JDK的字符及编程API接口开始,讨论String对象的实例原理及常量池管理方式,然后阐述各种不同类型集合的差别及适用场景,最后分析了线程与进程...
该系统包含复杂的电路设计,如放大电路、反馈电路和整流电路,是维修的关键环节。 3. Formatter System(接口系统) 接口系统作为打印机与计算机之间的桥梁,接收并翻译计算机发送的数据,使之适应直流控制系统。...
Java微信小程序开发是一种结合了Java编程语言与微信小程序平台的技术实践。微信小程序是腾讯公司推出的一种轻量级应用开发框架,它允许开发者在微信平台上构建无需安装即可使用的应用程序,为用户提供便捷的服务。...
浅淡测试自动化,用IE打开。
- 短信发送失败或校验出错时,应有相应的异常处理机制,向用户反馈错误信息。 - 同时,系统应记录这些操作的日志,便于排查问题和审计。 8. **性能优化** - 可以通过缓存验证码,减少数据库查询,提高响应速度。...
Java作为一种跨平台的编程语言,提供了多种库来实现二维码的生成,其中ZXing(Zebra Crossing)是一个非常流行的开源项目,专门用于处理一维条形码和二维条形码,包括二维码的生成与解析。 ZXing,即“斑马线”,...
PCB(印刷电路板)是现代电子设备中不可或缺的组成部分,随着电子信息产业的发展,PCB的设计和制造技术也在不断进步。在多层线路板生产中,层间对位精度是一个关键因素,它直接影响到产品的最终质量和性能。层间对位...
finally 块用于异常处理,用于执行清除操作。finalize 是 Object 类中的一个方法,用于垃圾收集器在删除对象之前执行必要的清理工作。 Anonymous Inner Class Anonymous Inner Class 是一个没有名字的内部类,它不...
蓝桥杯是中国计算机学会主办的全国性计算机程序设计竞赛,考试内容涵盖算法、数据结构、计算机网络、数据库、操作系统等多个领域。了解考试内容和格式可以帮助你更好地备战考试。其次,学习基础知识。蓝桥杯考试的...
8. **异常处理与日志记录**:在实现支付功能时,应充分考虑各种可能出现的异常情况,如网络中断、微信服务器返回错误等,需要有完善的异常处理机制,并通过日志记录异常信息以便于后期排查问题。 以上就是基于SSM...
浅淡食品安全论文.doc
- `#3C3C3C`:同样是较为浅淡的黑色。 2. **红色系**: - `#FF0000`:鲜艳的红色,适合强调或警告信息。 - `#FF60AF`:偏粉色的红色,可用于女性或浪漫风格的设计中。 - `#FF77FF`:带紫色调的粉红,适用于儿童...
浅淡食品安全毕业论文.doc
Java开发微信公众号。
"浅淡C语言实践教学改革" 本文主要讨论C语言实践教学改革的重要性和必要性。C语言是一门实践性很强的课程,它不但可以编写系统解决问题、分析问题和自学等能力的培养。然而,C语言的数据类型较多、表达式丰富、语法...
浅淡网络时代的信息安全.docx
4. **小组互助,共学共进**:采用课程设计的形式,以小组为单位完成任务,任务难度逐渐升级,涉及多门课程知识,这样有助于培养学生的团队协作和综合应用能力。 【总结与展望】 中职计算机教学的改进是一个持续的...