菜鸟学Java(十八)——异常

每个学编程的人在编程的过程中都会遇到各种异常。那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学习,慢慢地对它有了一些了解。下面我们一起看看Java中的各种异常。


我们先看下面这张图:





如图所示,Java中所有的异常都是从Throwable继承而来,Throwable被定义在jave.lang包中,并且有两个直接子类——Exception和Error。其中Error指的是Java虚拟机的内部系统错误,而且通常情况下我们无法处理此类错误。今天我们主要讨论Exception,所有其他的异常都是Exception的子类,而且只有这些异常才是程序员可以处理的。


如上图所示,Exception有两个重要的直接子类,分别是IOException和RuntimeException。IOException类用于处理程序的输入输出异常,包括键盘锁定或文件异常等;RuntimeException类用于处理从程序逻辑中产生的错误,例如访问数组下标越界、空指针异常等。


常见异常:

异常类名称

 异常类含义

ArithmeticException

 算术异常类

ArrayIndexOutOfBoundsException

 数组下标越界异常类

ArrayStoreException

 将与数组类型不兼容的值赋值给数组元素时抛出的异常

ClassCastException

 类型强制转换异常类

ClassNotFoundException

 未找到相应类异常

EOFException

 文件已结束异常类

FileNotFoundException

 文件未找到异常类

IllegalAccessException

 访问某类被拒绝时抛出的异常

InstantiationException

 试图通过newInstance()方法创建一个抽象类或抽象接口的实例时抛出的异常

IOException

 输入输出异常类

NegativeArraySizeException

 建立元素个数为负数的数组异常类

NullPointerException

 空指针异常类

NumberFormatException

 字符串转换为数字异常类

NoSuchFieldException

 字段未找到异常类

NoSuchMethodException

 方法未找到异常类

SecurityException

 小应用程序(Applet)执行浏览器的安全设置禁止的动作时抛出的异常

SQLException

 操作数据库异常类

StringIndexOutOfBoundsException

 字符串索引超出范围异常

IndexOutOfBoundsException

 当某对象(如数组或字符串)的索引超出范围时抛出该异常


1、如果无法处理某个异常,那就不要捕获它;

2、捕获异常要按照从小到大的顺序(例如应该先捕获NullPointerException,然后RuntimeException,最后Exception);

3、尽量在靠近异常被抛出的地方捕获异常;   

4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出;

5、按照您的异常处理必须多精细来构造您的方法;

6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。 


捕获适当的异常 
正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。 

规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:   
    catch(FileNotFoundException fnfe)   
以及 
    catch(SQLException sqle) 

规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。 

规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。 


OK,以上就是我总结整理的关于Java异常的一些学习心得,希望能够给看这篇文章的人一点点帮助。



posted @ 2014-03-31 07:56  刘水镜  阅读(583)  评论(0编辑  收藏  举报