java异常处理

刚做项目的时候一直分不清RunTime异常和checked异常,还是为了找工作,又重新把异常的知识过了一遍,参考书籍:《Java编程思想》、《疯狂Java讲义》。以下简单梳理了感觉蛮重要的几个点:


1、一直分不清Runtime异常和checked异常,最后有人跟我说继承自RuntimeException类的就是RunTime异常,其他的是checked异常,就这样吧T_T

2、JVM处理异常的方式:打印异常的跟踪栈消息,并终止程序运行。         

3、finally()方法总是会执行,用于回收资源。当执行try、catch块中的return、throw前会执行finally()方法,所以不能在finally()中使用return、throw。一旦使用,将会导致try、catch块中的return、throw语句失效。

4、try块里声明的变量是代码块内局部变量,在catch内无效。

5、当有多个catch时,先小后大。

6、子类方法声明抛出的异常不能大于或多于父类方法声明抛出的异常。

7、当catch中throw checked异常时,一定要声明抛出异常;throw Runtime异常时不必声明。

7、不应该把底层的原始异常直接传给用户,通常的做法是捕获原始异常,把原始异常记录下来(logger),然后抛出一个包含对用户的提示信息的新的业务异常(异常转译,职责链模式)。通过将cause对象传入传入新的业务异常,可以在需要时追踪到最原始的异常信息。但是在最后提到的反模式的文章中说:不要同时进行“抛出”和“记录”两种操作。同时进行这两类操作会对同一个问题产生多种log消息,这会给运维人员分析日志带来麻烦。是指上层调用者还会logger吗?不知道是什么情况了。。。



异常处理规则

1、把大块的try块分割成多个小try块,对异常分别捕获并处理异常。

2、checked异常必须捕获处理或抛出。

3、对于Runtime异常尽量不要处理。

4、当程序员需要自行抛出异常时(自己无法在程序中解决时),推荐使用Runtime异常。

5、捕获异常后进行处理:

  • 对异常进行适当的修复,然后绕过异常发生的地方继续执行;
  • 用别的数据进行计算,以代替期望的方法返回值;
  • 提示用户重新操作;
  • 重新抛出新异常(异常转译);
6、如果当前层不清楚如何处理异常,就不要捕获,直接用throws抛出,让上层调用者来负责处理。


常见的Runtime异常:


常见的Checked异常:



下面附一篇感觉很赞的博文,讲异常处理反模式的:
http://www.cnblogs.com/elaron/archive/2012/12/24/2831286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值