错误处理是编程必须要做的事情之一。输入可能出现异常,设备可能失效。简言之,可能会出错,当错误发生时,程序员就有责任确保代码照常工作。高级程序员可能每一句代码都习惯性的会考虑异常情况,进行错误处理,抛出异常,增强代码的健壮性,比较low的程序员觉得每行代码都不会发生错误,都是对的,所以不进行异常处理和错误排查,导致bug满天飞,程序到处crash掉,带来了很严重的维护后果。

雅致地处理错误代码是程序员的自我修养必备之一。很久之前,大都数语言都不支持异常。这些语言处理和汇报错误的手段都有限。你要么设置一个错误标识,要么返回给调用者检查的错误码。现如今,我相信大都数人依然是采用这种方法来处理错误方式。当然,我也喜欢定义各种错误码来追溯定位问题,但是这类问题搞乱了调用者代码。调用者必须在调用之后即刻检查错误。不幸的是,这个步骤很容易被遗忘。所以,遇到错误时,最好抛出一个异常。调用代码很整洁,其逻辑不会被错误处理搞乱。

我们应该弄清楚错误处理与整洁代码的关系。许多程序完全由错误处理所占据。所谓占据,并不是说错误处理就是全部。我的意思是几乎无法看明白代码所做的事,因为到处都是凌乱的错误处理代码。错误处理很重要,但如果它搞乱了代码逻辑,就是错误的做法。

在某种意义上,try代码就像是事务,catch代码块将程序维持在一种持续状态,无论代码块中发生了什么均如此。所以,在编写可能抛出异常的代码块时,最好先写出try-cathc-finally语句。这能帮你定义代码的用户应该期待什么,无论try代码块中执行的代码出什么错都一样。

尤为关键的是,很多人喜欢抛出异常后继续处理逻辑业务,把你的业务逻辑代码写在finally后,这样你可能就不了解异常的初衷,还不如你直接用if...else去实现呢。给出发生异常的环境说明,按照各种异常等级或者异常纲类,把你的错误优雅的输出在log中,或者在一些异常中终止你的程序进程,有助于你排查和定位这些问题,提高你的软件质量。

 

异常处理try-catch-finally_java