如何优雅的处理异常(java)

plugin 发布于 2015/01/14 06:33
阅读 888
收藏 7

1,我看开源中国的很多源码,比如负责从网络解析数据,从数据库的操作都抛异常。这么做的原因是什么。

2,是不是通常情况下,返回值是void的方法一般都抛出异常(如果有的话),有返回值的就在内部try,catch,然后通过返回值标识这个方法是不是执行成功。比如返回值是String时,就约定返回""就是发生了异常,

3,A方法调用了B方法,B方法内部可能会产生IOException,B方法是带有返回值的,A方法的内部也会有其他的操作产生IOException,这时候,让B方法抛出一个IOException,是不是便于在A方法中的catch中集中处理

4,一段逻辑,可能会产生A异常,解析json异常,IOExceptoin,A,B都是IOException的子类,这时候是都catch,还是只捕获IOException

5.还看过一种写法,比如要catch A,B,C,D异常,结果他只是catch Exception,然后在内部throw new RuntimeException,这么做的依据是什么

6.effective java里写发生可恢复错误的抛出受检异常,程序错误就抛出运行时异常。我能想到的程序错误例子,就是加载jdbc驱动时,没找到。什么情况下是可恢复的错误呢,比如写磁盘文件,磁盘满了,这是属于可恢复的吗?怎么恢复呢

以上是我看一些代码里写的,可能由于自己的经验不足,所以困惑这其中具体的依据是什么,恳请指点。谢谢

加载中
0
南湖船老大
南湖船老大
一次问这么多问题,看了就怕 。。。
0
tianyuanzhonglu
tianyuanzhonglu

这个问题应该归于错误处理的设计原则。

cpu执行指令可能出错,io操作可能出错,系统调用可能出错,第三方库调用可能出错。。。。。。如果写个hellow world也要处理cpu错误,io错误,系统调用错误,其他错误等等等等,那我们没办法写代码了。

因此类似公司的工作流程,最底层开发者能处理的事情由最底层开发者处理,处理不了的上报给team leader,team leader检查自己能否处理,处理不了的再上报,这样层层上报直到boss,boss处理不了的。。。let it crash(happen)

异常和错误返回码也可以类似的设计,每层处理自己能够/需要处理的,层层受检

_
_Yud
正解. 处理不了就向上报.专注与你能做的事就好了, 把自己的事做好就可以了.
0
_wxyz
_wxyz

问题太深奥了~~

我只能说下我自己的经验:方法尽量功能单一,方法自己处理不了的异常就抛出去,能自己消化的就自己消化。

0
朱宏青
朱宏青
多写几个项目你就知道了 空说无用
0
y
yusf

优雅处理异常的关键在于在方法的定义的地方加上throws Exception,如果不需要特殊处理,请不要try cath,直接原样上报。

返回顶部
顶部