为什么要异常处理?

  1. 程序运行时发生的一些错误不足以让程序终端,此时应抛出异常然后执行其他命令
  2. 让用户保存数据,最终以妥善的方式终止程序

 

层次结构

所有异常继承与Throwable类

Error类属于Java运行时系统的内部错误和资源耗尽错误

RuntimeException是程序错误导致的异常,如类型转换数组越界等

  • 错误的类型转会
  • 数组访问越界
  • 访问null指针

OtherException是程序本身没有问题但由于像IO错误这类导致的其他异常,如文件不存在等

  • 试图在文件尾部后面读取数据
  • 试图打开不存在的文件
  • 试图根据字符串查找Class对象而该类不存在

 

抛出异常

Error类与RuntimeException类的异常称为非受查异常,其他称为受查异常

  • 需要抛出throws受查异常或try-catch去捕获所有受查异常,如果没有这么做,编译器会发出错误信息
  • 而RuntimeException是在写程序时应尽量避免的错误

 

异常链

可以在catch语句中抛出新的异常,这样做是为了改变异常的类型,添加具体的信息然后交给上层处理

 

finally结构

try结构中有return,而finally中没有,那么当try执行return语句时会去执行完finally子句然后再返回

try结构中有return,而finally中也有,那么finally会覆盖try中的return结果