java不可不知系列 —— 15个异常处理原则

       在JAVA开发过程中,见过很多人在进行异常处理的时候,直接一个 e.printStackTrace() 就完成了,这是一种非常粗陋的做法,首先会导致应用日志的大量错误信息,而很多时候你都不知道这些错误信息因何发生;再者,反应到用户端将直接导致用户无法获取操作的结果以及失败的原因。



以下 15 条异常处理的原则整理来自国外的博客:

1. 不用使用异常来管理业务逻辑,应该使用条件语句。如果一个控制逻辑可通过 if-else 语句来简单完成的,那就不用使用异常,因为异常会降低代码的可读性和性能,例如一些 null 的判断逻辑、除0的控制等等;

2.异常的名字必须清晰而且有具体的意思,表示异常发生的问题,例如 FileNotFoundException 就很清晰直观

3.当方法判断出错该返回时应该抛出异常,而不是返回一些错误值,因为错误值难以理解而且不够直观,例如抛出 FileNotFoundException 异常,而不是返回 -1 或者 -2 之类的错误值。

4.应该捕获指定的异常,而不是 catch(Exception e) 了事,这对性能、代码的可读性以及诸多方面都有好处

5.Null 的判断逻辑并不是一成不变的,当方法允许返回 null 的时候使用 if-else 控制逻辑,否则就抛出 NullPointerException

6.尽量不要二次抛出异常,如果非得这么做的话,抛出同一个异常示例,而不是重新构建一个异常对象,这对性能是有帮助的,而且外层调用者可获取真实的异常信息

7.定义你自己的异常类层次,例如 UserException 和 SystemException 分别代表用户级别的异常信息和系统级别的异常信息,而其他的异常在这两个基类上进行扩展


8.明确的使用不同的异常类型:

  Fatal: System crash states.

Error: Lackofrequirement.

Warn:Notanerrorbuterrorprobability.

Info: Infoforuser.

Debug: Infofordeveloper.


9.不要仅仅捕获异常而不做任何处理,不便于将来维护

10.不要多次重复记录同一个异常,这可以让我们清晰的了解异常发生的位置

11.请使用 finally 来释放一些打开的资源,例如打开的文件、数据库连接等等

12.大部分情况下不建议在循环中进行异常处理,应该在循环外对异常进行捕获处理

13.异常的粒度很重要,应该为一个基本操作定义一个 try-catch 块,不要为了简便,将几百行代码放到一个 try-catch 块中

14.为你的异常生成足够的文档说明,至少是 JavaDoc

15.为每个异常消息定义一个数值,这对好的文档来说是非常重要的。


如何学习才能快速入门并精通呢?

当真正开始学习时难免不知从何入手,从而导致效率低下影响继续学习的信心。

但最重要的是不知道需要重点掌握哪些技术,学习时频繁踩坑,最终浪费大量时间。

为了让学习变得轻松高效, 现在给大家提供一个学习平台,让你在实践中积累经验掌握原理。主要方向是JAVA架构师,在这里你可以学习Java工程化、高性能及分布式、深入浅出、性能调优、Spring,MyBatis,Netty源码分析和大数据等知识点。可以加入Java后端技术群:819940388群里有阿里大牛直播讲解技术,或是关注微信公众号:Java资讯库,回复“架构”,免费的大型互联网Java技术视频分享给大家。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引言 在程序运行过程中(注意是运行阶段,程序可以通过编译),如果JVM检测出一个不可能执行的操作,就会出现运行时错...
    Steven1997阅读 2,518评论 1 6
  • 八、深入理解java异常处理机制 引子try…catch…finally恐怕是大家再熟悉不过的语句了, 你的答案是...
    壹点零阅读 1,661评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Java异常控制机制又被称为“违例控制机制”。捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行...
    kelgon阅读 4,364评论 2 50
  • 今天下午在乡下花了点时间去喂猪,仔细观察了一下猪。 叔叔分两个猪栏养了两群不同的猪,一种是美国那种品种,块头大经过...
    飞燕绝尘阅读 1,027评论 0 1