Java异常总结
为什么要异常处理?
- 程序运行时发生的一些错误不足以让程序终端,此时应抛出异常然后执行其他命令
- 让用户保存数据,最终以妥善的方式终止程序
层次结构
所有异常继承与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结果