您的位置:首页 > 编程语言 > Java开发

java异常处理

2016-07-15 13:10 337 查看
刚做项目的时候一直分不清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异常尽量不要处理。

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

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

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

常见的Runtime异常:

ArithmeticException  
算术异常

ClassCastException 类型强制转换异常

IllegalArgumentException 传递非法参数异常

IndexOutOfBoundsException 数组越界异常

NullPointerException 
 空指针异常

ArrayStoreException 
 向数组中存放与声明类型不兼容对象异常

NumberFormatException 数字格式异常
  extends  IllegalArgumentException

常见的Checked异常:

ClassNotFoundException 无法找到指定的类异常

IllegalAccessException 
 
当前正在执行的方法无法访问指定类、字段、方法或构造方法

InstantiationException 
 
实例化异常

IOException  I/O异常

SQLException 数据库异常

下面附一篇感觉很赞的博文,讲异常处理反模式的: http://www.cnblogs.com/elaron/archive/2012/12/24/2831286.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 异常处理