Effective Java之抛出与抽象相应的异常(六十一)

1.如何处理异常?
方法B抛出了一个受检的异常 ,那么方法A在内部调用方法B时,面对方法B抛出的受检异常,可以选择继续抛出向上传播这个异常,也可以捕获这个异常进行处理。究竟是向上传播抛出,还是捕获处理呢?

2.处理异常方法

方法一:抛出与抽象想对应的异常
例如
如果方法B抛出了NoSuchElementException这个受检异常,然而在方法A中调用方法B时,根据方法A中的逻辑,当遇到NoSuchElementException异常时,抛出一个IndexsOutOfBoundsException异常更为合适。那么就不应该选择向上传播抛出NoSuchElementException,而是应该选择捕获NoSuchElementException,然后抛出IndexsOutOfBoundsException。

更高层的实现应该捕获底层的异常,同时抛出可以按照高层抽象进行解释的异常。这种做法称为异常转译(exception translation)。

方法二:避免底层异常出现
处理来自底层异常的最好做法是,在调用底层方法之前确保它们会成功执行。
还是拿上面的当成例子,如果高层的A方法能够通过普通的判断语句保证底层的B方法永远也不会抛出异常,那么就可以不必处理B方法的异常。

方法三:绕开底层异常
如果无法避免低层异常,可以让更高层来悄悄地绕开这些异常,从而将高层方法的调用者与低层的问题隔离开来。使用适当地记录机制来将异常记录下来。
对于上面的例子,如果A方法实在不能避开B方法,那么该怎么办呢,只需要try-catch底层的异常,然后偷偷地通过记录机制把异常记录下来,这样A就不用做其他异常处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值