优雅地处理异常真是一门学问啊!(二)

简介: Java极客技术

04、关于异常处理机制的使用,我这里总结了一些非常实用的建议,希望你能够采纳。

1)尽量捕获原始的异常

实际应该捕获 FileNotFoundException,却捕获了泛化的 Exception。示例如下。40.png

这样做的坏处显而易见:假如你喊“王二”,那么我就敢答应;假如你喊“老王”,那么我还真不敢答应,万一你喊的我妹妹“王三”呢?

很多初学者误以为捕获泛化的 Exception 更省事,但也更容易让人“丈二和尚摸不着头脑”。相反,捕获原始的异常能够让协作者更轻松地辨识异常类型,更容易找出问题的根源。


2)尽量不要打印堆栈后再抛出异常

当异常发生时打印它,然后重新抛出它,以便调用者能够适当地处理它。就像下面这段代码一样。

41.png

这似乎考虑得很周全,但是这样做的坏处是调用者可能也打印了异常,重复的打印信息会增添排查问题的难度。

42.png

3)千万不要用异常处理机制代替判断

我曾见过类似下面这样奇葩的代码,本来应该判 null 的,结果使用了异常处理机制来代替。


43.png

捕获异常相对判断花费的时间要多得多!我们可以模拟两个代码片段来对比一下。

代码片段 A:


44.png

代码片段 B:

45.png

100000 万次的循环,代码片段 A(异常处理机制)执行的时间大概需要 1983 毫秒;代码片段 B(正常判断)执行的时间大概只需要 1 毫秒。这样的比较虽然不够精确,但足以说明问题。


4)不要盲目地过早捕获异常

如果盲目地过早捕获异常的话,通常会导致更严重的错误和其他异常。请看下面的例子。

46.png

假如文件没有找到的话,InputStream 的对象引用 is 就为 null,新的 NullPointerException 就会出现。

47.png

NullPointerException 并不是程序出现问题的本因,但实际上它出现了,无形当中干扰了我们的视线。

正确的做法是延迟捕获异常,让程序在第一个异常捕获后就终止执行。

05、好了,关于异常我们就说到这。

异常处理是程序开发中必不可少的操作之一,但如何正确优雅地对异常进行处理却是一门学问,好的异常处理机制可以确保程序的健壮性,提高系统的可用率。

相关文章
|
2月前
|
设计模式 算法 搜索推荐
探索编程之美:从代码到哲学的启示
在数字世界的深处,编程不仅仅是一系列指令的排列组合。它是思考的艺术,是解决问题的舞蹈,更是人类智慧与创造力的体现。本文将通过浅显易懂的语言,带你领略编程的魅力所在,并结合个人技术感悟,探讨编程如何影响我们的思维方式和世界观。让我们一起跟随代码的脚步,发现那些隐藏在逻辑背后的哲理与美。
|
8月前
|
程序员 计算机视觉
程序员的“防御性编程”
最近都在聊程序员要做好“防御性编程”,"防御性编程"的概念从之前的“保护程序”一下子变成了现在的“保护程序员”,一字之差,千差万别。
程序员的“防御性编程”
|
程序员 定位技术
我21年编程生涯中的21个错误
  从我21年的编程中学到的经验教训。   2022年1月18日。今天对我来说是美好的一天。 我终于完成了21年编程。   ew! 好像昨天和今天在这里一样,我的内心写着一个40岁的中年程序员,他成功地度过了软件行业这个危险世界的正弦波峰和波谷。 是的,至少对我来说,这是决定性的时刻。   话虽如此,犯错是实现卓越的学习途径的一部分。 快速且经常失败是成功的标志。 为了避免多次犯同样的错误,应该放在优先列表上。   是的,个人经验是最有效的学习方法,但是通过他人的经验获得的知识是一种更快,更聪明的方法,可以减轻痛苦。 毕竟,生命是短暂的。 您不可能一生中犯下所有可能的错误。   软件
143 0
优雅地处理异常真是一门学问啊!(2)
优雅地处理异常真是一门学问啊!
87 0
|
Java 程序员 数据库
优雅地处理异常真是一门学问啊!(1)
优雅地处理异常真是一门学问啊!
76 0
|
设计模式 网络协议 算法
自学编程的八大误区!克服它们,豁然开朗!
说在前面 小伙伴们大家好,又是全新的一天。 关于“自学编程的一些常见误区”这个话题其实很早之前就在视频里聊过了。时间过去了大半年,也还是有很多小伙伴会提及各种自学过程中的常见疑惑,所以还是用文字总结一下这几点想法,和大家共勉。 误区1:忽略基础,盲目莽进 基础知识和基础路线真的非常重要,就以Java领域举例,现在的应用框架实在是太多了,五花八门,层出不穷,迭代的速度太快了。但是假如Java SE的基础不牢、网络协议和操作系统不熟,基本的设计模式不了解,那一味地追求学习新框架反而会让自己陷入迷茫与困顿。 基础牢固,应用框架的学习自然就不用惧怕了,很快就能切入核心,掌握原理。而且越时髦的东西
145 0
|
程序员
关于编程 鲜为人知的真相
导读:原文来自dotmac.rationalmind.net上一篇《Some lesser-known truths about programming》,译文来自外刊IT评论整理编译《关于编程,鲜为人知的真相》而来。
832 0
|
程序员 C++ Python
编程语言发明者们,结局都不太好,谁的错?
创造现在主流编程语言的程序员们,都怎么样了?提起灯泡的发明者,你可能想起亨利·戈培尔,提起印刷术,你可能会想到毕昇。这些伟人离我们太远太远,但当提起C++、python、java时,他们的发明者又离我们如此的近,至少他们还在世上,也在工作,但似乎他们的现状都不太好。
1691 0

相关实验场景

更多