异常机制
基本概念
异常就是”不正常”的含义,在Java语言中主要指运行阶段发生的错误,Java中错误有俩种:
Error类主要描述比较严重通常无法编码解决的错误
Exception类主要描述轻微可以编码解决的错误,如:0作为除数
异常的分类
java.lang.Exception类是所有异常的超类,具体分类如下:
RuntimeException异常 - 运行时异常,也叫做非检测性异常
IOException和其它异常 - 其他异常,也叫做检测性异常
所谓检测性异常就是在编译阶段能够被编译器检测出来并给出提示的异常
RuntimeException异常的主要子类:
- ArithmeticException - 算术异常
- ArrayIndexOutOfBoundsException - 数组下标越界异常
- NullPointerException - 空指针异常
- ClassCastException - 类型转换异常
- NumberFormatException - 数字格式异常
注意:
当程序执行过程中发生异常又没有手动处理时,则由Java虚拟机采用默认方式处理,而默认处理方式:打印异常的名称、异常的原因、异常发生位置后终止程序,导致后续代码无法执行
异常的避免
对于绝大多数的非检测性异常可以直接使用if条件判断来避免该异常的发生。
异常的捕获
- 语法格式
try{
编写所有可能发生异常的语句;
}
catch(异常类型 变量名){
编写针对该类异常处理的语句;
}
…
finally{
编写无论是否发生异常都应该执行的语句;
} - 注意事项
a.若需要多个catch分支时,切记小类型的异常放在大类型的前面。
b.懒人的写法:
c.finally{}中的代码主要用于进行善后工作的处理,如:关闭打开的文件、删除文件等catch(Exception e){ ...}
异常的抛出
基本概念
在某些特殊场合中无法处理或不便于处理发生的异常,此时就需要将异常转移给该方法的调用者处理,这种方式就叫异常的抛出。语法格式
访问控制符 返回值类型 方法名称(形参列表) throws 异常类型1,异常类型2,…{}方法重写的原则
a.要求方法名相同、参数列表相同、返回值类型相同,从jdk1.5开始允许返回子类。
b.要求方法权限不能变小,可以相同或变大。
c.要求不能抛出更大的异常。
注意:
子类重写的方法可以抛出与父类一样的异常、更小的异常以及不抛出异常,但不能抛出更大的异常或平级不一样的异常。
自定义异常
基本概念
虽然Java官方提供了大量异常类但没有专门针对年龄不合理的异常类,若希望使用这种针对性的异常就需要程序员自己写一个异常类。实现流程
a.自定义XXXException继承Exception或者其子类;
b.提供两个版本的构造方法:无参构造 和 字符串作为参数的构造;异常对象的产生
throw new 异常类型();
如:
throw new NullPointerException(); - 表示产生空指针异常
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!