Java之异常


如果由于出现错误而出使得某些操作没有完成,程序应该:
1)返回到一种安全状态,并能够让用户执行一些其他的命令
2)允许用户保存所有操作的结果,并以妥善的方式终结

在java中华,如果某个方法不能够采用正常的途径完整它的任务,就可以通过另一个路径退出方法。在这种情况下,方法并不返回任何值,而是抛出(throw)一个封装了错误信息的对象。需要注意的是,这个方法将会立刻退出,并不会返回任何值。此外,调用这个方法的代码也将无法继续执行,取而代之的是,异常处理机制开始搜索能够处理这种异常状况的异常处理器(exception handle)。

异常分类

在java程序设计语言中,异常对象都是派生与Throwable类的一个实例。
Java之异常
Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。
在java程序设计时,需要关注Exception层次结构。这个层次结构又分解为两个分支。一个分支派生于RuntimeException;另一个分支包含其他异常。划分两个分支的理由规则是:由程序错误导致的异常属于RuntimeException;而程序本省没有问题,但是由于I/O错误这类问题导致的异常属于其他异常。

派生于RuntimeException的异常包涵一下几种情况:
1)错误的类型转换;
2)数组访问越界
3)访问null指针
不是派生于RuntimeException的异常包括:
1)试图在文件尾部后面读取数据
2)试图打开一个不存在的文件
3)试图根据给定的字符串查找class对象,而这个字符串对象表示的类并不存在。

Java中派生于Error或RuntimeException类的所有异常称为非受查异常,而其他的异常称为受查异常。

声明受查异常

一个方法不仅要告诉编译器将要返回什么值,还要告诉编译器有可能发生什么错误。
声明受查异常的格式如下:

public FileInputStream(String name) throws FileNotFoundException

这个声明表示构造器将根据给定的String参数产生一个FileInputStream对象,但也有可能抛出一个FileNotFoundException异常。

总之,一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(error),要么就要避免发生(RuntimeException)