第六十五条 不要忽略异常

不要忽略异常,这条建议看上去很容易,但我们代码中却常常能看到反例。当api的设计中声明某些方法中会抛出某个异常时,它们往往在说明一些情况,某些场景下可能会发生异常,所以,我们不应该忽略它。忽略异常的方法很简单,只要用个 try...catch 把它包裹起来就行了,并且 catch 里面什么都不写。一旦这样操作了,我们没有针对异常情况做对应的逻辑处理,只是简单的把它给忽略了,代码是不会崩溃了,但可能会造成逻辑或数据的错误。忽略异常犹如忽略火警信号,我们把高铁火警信号器关掉了,平时抽烟或点个蜡烛蛋糕不会造成灾难,不会报警,这个一般不会造成什么灾难;但如果高铁一个车厢已经着火了,这时候火警信号器仍旧没报警,因为已经被关闭了,这是后没人去救火,就会造成灾难级别的事故。同理,每次见到空 catch 时,我们需要注意,最起码要写个声明,解释为什么可以忽略这个异常。

有一种情形可以忽略异常,就是关闭FileInputStream的时候。因为还没有改变文件的状态,所以不必执行任何恢复动作,并且我们已经从文件中读取到所需要的信息,所以不必终止正在进行的操作。但是,在这种情况下,把异常记录下来还是明智的做法,因为如果这些异常经常发生,我们就可以调查异常的原因。

以上建议同样适用于受检异常和未受检异常。不管异常代表了可预见的异常条件,还是编程错误,用空的catch块忽略它,会导致程序在遇到错误的情况下悄然的执行下去。然后,有可能在将来的某个点上,当程序不能再容忍与错误源明显相关的问题时,他就会失败,这是后的错误就可能很大了。正确的处理异常能够彻底挽回始变,只要将异常传播给外界,至少会导致程序迅速的失败,从而保留了有助于调试该失败条件的信息。

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/84320752