Effective Java(四)

本文介绍了Java异常处理的基本原则,包括正确使用异常、区分受检异常与运行时异常的重要性,并探讨了有效处理异常的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常
虽然我们都希望我们的代码时刻正常运行着,但是事实上我们很难保证我们的代码不出现异常,可能是编码中没有判空导致的空指针异常,也可能是数组使用产生数组越界异常,即使我们保证自己写的代码没有异常,我们也很难保证上游的接口,服务没有异常,因此异常是工作中必须面对的。
Effective Java中异常章节介绍的不是很多,主要包括下面几方面内容,简单介绍下:
一.只针对异常的情况才使用异常
这点主要说的是我们不要通过异常来控制程序的执行顺序,"异常应该只用于异常的情况下,它们永远不应该用于正常的控制流"。书中给的反例我倒是真没见过这种,我认为应该是很难见到的。代码如下:
    
 public static void terribleExceptionUse(int[] range){
          try {
              int i = 0;
              while(true){
                   System.out.println(range[i++]);
              }
          }catch (ArrayIndexOutOfBoundsException e ) {
              
          }
     }

这段代码只是想遍历数组,这样写法还是很少见的,通常我们都使用for-each方法即可,此外这种方式不会对性能有提高,反而会下降,不要使用。
总而言之,还是不要将异常使用于正常的控制流。
二.对可恢复的异常使用受检异常,对编程错误使用运行时异常
这里先介绍下什么是受检异常和运行时异常,java里面异常分为两大类:checkedexception(检查异常)和unchecked exception(未检
查异常),对于未检查异常也叫RuntimeException(运行时异常),对于运行时异常,java编译器不要求你一定要把它捕获或者一定要继续抛出,但是对checkedexception(检查异常)要求你必须要在方法里面或者捕获或者继续抛出.
对未检查的异常(unchecked exception )的几种处理方式:
1、捕获
2、继续抛出
3、不处理
对检查的异常(checked exception,除了RuntimeException,其他的异常都是checked exception )的几种处理方式:
1、继续抛出,消极的方法,一直可以抛到java虚拟机来处理
2、用try...catch捕获
注意,对于检查的异常必须处理,或者必须捕获或者必须抛出
常见的非受检异常: NullPointerException,ClassCastException,ArrayIndexsOutOfBoundsException,ArithmeticException
常见的受检异常: Exception,FileNotFoundException,IOException,SQLException.

后面说的优先使用标准异常,抛出与抽象想对应的异常,每个方法抛出的异常都要有文档,不要忽略异常等没啥好说明的了,其实我们工作中处理异常的方式很简单粗暴,服务经常会把异常抛出给调用方,调用方catch到服务出现异常后,大多数是把异常信息打到日志中去,并且我们平时异常分类也不明细,通常直接抛出Exception。但是使用异常的时候要注意,不要有太大的try,catch块,这样一个小的非核心细节出错会导致整个接口都不可用,这点还是要格外注意的,try,catch代码块尽量小一些。
此外异常一个比较重要的知识点,try,catch,finally,这个就是基础知识内容了,什么时候使用finally,try,catch,finally的执行顺序等。简单说finally中主要做一些关闭资源的操作,如文件,连接等,放到finally中是因为不管是否出现异常,finally块中的代码都会被执行,所以文件,连接等资源的关闭就应该放到finally中处理,从而保证正常关闭资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值