异常处理小总结
异常处理小总结
异常概述
异常:在java语言中,将程序执行中发生的不正常情况称为“异常”。(开发中的语法错误和逻辑错误不是异常)
Error
java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:*Error (栈溢出)和 OutOfMemoryError(堆溢出)。一般不编写针对性的代码进行处理。
Exception
其他因编程错误或偶然的外因导致的一般性问题,可以使用针对性代码进行处理,如:
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
- 数组角标越界
异常体系结构
运行时异常
运行时异常:是指编译器不要求强制处理的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。java.lang.RuntimeException类及其它的子类都是运行时异常。对于这类异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
编译时异常
编译时异常:是指编译器要求必须处置的异常。即程序在运行时由于外因造成的一般性异常。编译器要求java程序必须捕获或声明所有的编译时异常。对于这类异常,如果程序不处理,可能会带来意想不到的结果。
异常结构
红色:编译时异常(受检异常)
蓝色:运行时异常(非受检异常)
异常处理机制
try-catch-finally
语法:
注意:
- finally是可选的,且finally中的代码一定会执行
- 在try结构中声明的变量,在出了try结构以后,就不能被调用了
- catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓
- catch中的异常类型如果满足子父类关系,则要求子类声明一定在父类上面。否则报错。
捕获异常的有关信息
throws + 异常类型
注意:
- 方法重写时,子类重写的方法抛出的异常类型 不大于 父类被重写的方法抛出的异常类型
- throws 后可以加多个异常类型
- 当出现异常,会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会抛出。异常代码后续的代码就不会再执行。
如何选择异常处理方式
手动抛出异常对象
自定义异常类
注意:当自定义异常类继承RuntimeException 时,手动抛出后,可以不用throws 进行处理;当自定义异常类继承Exception 时,手动抛出后,必须用throws 进行处理。(这种手动生成异常,一般不用try-catch处理)