在JAVA中异常处理是一个关键点,它可以减少你的代码量同时也会让陷入错误当中。也就是说在写java异常处理代码的过程也就是在挖坑埋地雷的过程,其它人使用你写的代码就会因为异常处理的不好而出现错误的结果。
我们都知识java异常处理由 try 、catch 、finally 这三个关键字建行处理,那么当我们在使用它们时该注意哪些方面呢。
java异常分为 运行时异常 和 编译时异常。
下面有几个问题要问:
1. 我们的代码中只要有问题就要抛出 编译时异常 吗?
2. 我们对异常处理中在catch块中只要输出异常信息 或者再抛出一个在应用中自定义的异常吗?
3. 难道我们的代码到处都是 try catch 吗?
下面就上面几个问题进行讲解:
1. 在java编译器在编译过程中,往往会对代码有一个优化的过程,可以让代码运行得更高效率,而异常处理的代码会阻碍这个过程。也就是说我们应尽量让try catch语句块的代码变少。我们在处理由底层抛出的异常时,可以把该方法得到的结果在异常处理语句外进行处理。那么这catch语句中我们又该如果处理呢?
- 继续抛出一个异常 或 抛出自定义的异常
我看到其它地方写着 我们不能抛弃异常,抛弃异常也就是在catch中为空或只是简单的调用e.printStackTrace()语句输出一些信息,那么不抛弃异常就是要继续抛出一个异常吗?
不是的,在异常处理中我们可以将代码分成两类 :一类是读取类,另一类是修改添加的维护类。
在读取类中我们关心的只是该方法得到的结果,该方法因各种原因出现异常时我们没有必要对它再抛出一个编译时异常,在这里我们只要返回一个null的结果,最多也只能抛出一个运行时异常。当然也不能简单的返回null.在catch语句块中我们应在日志中打印出错信息和出错原因。
在维护类中,我们要特别注意,比如当我们调用的方法出现异常时,如果在catch中抛弃了异常但又返回了一个表示正常调用的结果,那么此时就挖了一个坑就等别人来跳了。在这种异常中我们应抛出一个应用自定义的异常(编译异常、运行时异常),如果实在没有必要也应在日志中打印出错信息和原因。
无论是在读取类 还是 维护类异常处理中,像 流、数据库连接等需要关闭的也应在finally中进行处理,这一点一定要注意!要保证释放应该被释放的资源。
记住我们要的不是一个到处都try catch的系统,要正确适当的使用运行时异常!
Java异常处理之违背优秀编码规范的常见坏习惯 这篇也写的不错