异常处理经验谈

简介: 1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,这样,在编程时异常更加难以被忽视。 2.通常,只在最上层(一般是UI层)捕捉异常。如果要在其它层捕捉异常,除非是下列情况之一: (1)能够处理该异常,或者 (2)能够忽略该异常,或者 (3)需要转换该异常为其它特定异常后抛出新异常 3.UI层捕获异常后,可以 (1)将无关紧要的异常忽略。

1.异常处理相对于返回错误代码的一个最大优点在于,异常可以被自动传递,这样,在编程时异常更加难以被忽视。

2.通常,只在最上层(一般是UI层)捕捉异常。如果要在其它层捕捉异常,除非是下列情况之一:
 (1)能够处理该异常,或者
 (2)能够忽略该异常,或者
 (3)需要转换该异常为其它特定异常后抛出新异常

3.UI层捕获异常后,可以
 (1)将无关紧要的异常忽略。
 (2)将异常转换为错误信息展现给用户。
 (3)如果是重大异常,可以考虑终止应用程序。

4.最上层(一般是UI层)不得抛出新的异常;最上层需要捕捉所有异常,否则异常会直接导致程序终止,这将是非常不好的用户体验。

5.可以在非最上层抛出自定义异常。如果是自定义异常,请保证其是可序列化的,并且保证其实现了Exception的三个构造函数。

6.异常的抛出与截获需要很多的cpu时间,请谨慎的使用异常。

7.在可能抛出异常的地方,如果需要,请确保使用finally进行资源清理,而无论此处是否捕捉了异常。

8.在一个catch块中的代码都应该至少部分地处理了所捕捉的异常。否则,就不要使用catch块。

9.从构造函数中抛出异常。
  因为构造函数没有返回值,所以没有简单的方法来想构造函数的调用者发出构造失败的信号,这时便可以通过抛出异常来做到。比如构造参数与指定条件不符时,就抛出一个异常。 

10.在以上前提的保证下,可以在非最上层使用AOP截获(intercept)异常而进行日志记录,这样通过日志记录,我们可以了解系统的  运行状态。记不起在哪里看到过这样一句话:在软件实现中,异常和日志都是重要的质量保证手段,异常和日志总是同时出现的。
  可以说,异常是日志记录的重要/主要组成部分。

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
25天前
|
搜索推荐 PHP 开发者
PHP编程中的异常处理与最佳实践
异常处理在PHP编程中扮演着至关重要的角色,它不仅能够提高程序的稳定性和可靠性,还能使开发者更好地理解和调试代码。本文将深入探讨PHP中的异常处理机制,并介绍一些最佳实践,帮助读者更好地理解和运用异常处理技术。
|
7天前
|
Java 编译器 API
Java异常探秘:从错误中学习
Java异常探秘:从错误中学习
22 0
Java异常探秘:从错误中学习
|
1月前
|
设计模式 安全 编译器
【C++ 异常】C++异常处理:掌握高效、健壮代码的秘密武器
【C++ 异常】C++异常处理:掌握高效、健壮代码的秘密武器
54 1
|
4月前
|
运维 网络架构 索引
SSM整合-异常处理器及项目异常处理方案
SSM整合-异常处理器及项目异常处理方案
39 0
|
10月前
|
开发框架 IDE Java
【C#本质论 十二】异常处理
【C#本质论 十二】异常处理
53 0
|
11月前
|
缓存 前端开发 Java
Java后端开发你应该知道的全局异常处理
在开发Web应用程序时,异常处理是一项非常重要的任务。异常处理可以提高程序的健壮性和稳定性。Java后端开发人员可以设计一个统一的全局异常处理方案来解决异常处理的问题,避免代码冗余,提高开发效率。在本文中,我们将介绍如何设计Java后端的全局异常处理方案。
368 0
|
SQL C# 数据库
小谈C#异常
小谈C#异常
96 0
小谈C#异常
|
Java 开发者
get异常处理的必备技能 | 带你学《Java面向对象编程》之八十
本节结合案例介绍了try、chtch、finally、throw、throws之间互相配合的逻辑关系,并为读者展示了强制性较低的RuntimeException的开发优势。
get异常处理的必备技能   | 带你学《Java面向对象编程》之八十
对异常说“我不管” | 带你学《Java面向对象编程》之七十九
前几节向读者讲述了处理异常的办法,本节将介绍将异常抛出给其他类来处理的方法。
对异常说“我不管”   | 带你学《Java面向对象编程》之七十九
|
Java 开发者
强悍的异常处理-处理多个异常 | 带你学《Java面向对象编程》之七十七
当try块中出现多个异常,而catch块中捕获的只有有限个时,有时会出现无法捕获导致程序异常终止的情况,此时我们可以用多个catch块来解决。