1.异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器
2.错误分类
用户输入错误
设备错误
物理限制
代码错误
3.异常分类,所有的异常都是由Throwable继承而来,有两个分支,Error和Exception
Error类层次结构描述类Java运行时系统的内部错误和资源耗尽错误,如果出现这样的错误,除了通告给用户,并尽力使应用程序安全的终止之外,在没有其它办法
Exception有两个分支,一个分支派生于RuntimeException;另一个分支包含其它异常;划分这两个异常的规则是,由程序错误导致的异常属于RuntimeException,而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其它异常
派生于RuntimeException的异常包含下面几种情况
错误的类型转换
数组越界访问
访问null指针
不是派生于RuntimeException的异常包含下面几种情况
试图在文件尾部后面读取数据
试图打开一个不存在的文件
试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在
4.如果存在RuntimeException异常,那么一定是你的问题
5.java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常,其它所有的异常称为受查异常,编译器将会核查是否为所有的受查异常提供了异常处理器
6.方法应该在其首部声明所有可能抛出的异常,这样可以从首部反映出这个方法可能抛出那类受查异常
7.不必将所有可能抛出的异常都进行声明,遇到下面四种异常应该抛出
调用一个抛出受查异常的方法
程序运行过程中发现错误,并且利用throw语句抛出一个受查异常
程序出现错误
Java虚拟机和运行时库出现的内部错误
8.如果在子类中覆盖了一个超类的方法,子类方法中声明的受查异常不能比超类方法中声明的异常更通用,如果超类方法中没有抛出任何受查异常,那么子类也不能抛出任何受查异常
9.一旦方法抛出了异常,这个方法就不可能返回到调用者
10.如果某个异常发生的时候没有在任何地方进行捕获,那么程序就会终止运行,并在控制台上打印出异常信息,其中包括异常的类型和堆栈的内容