异常处理机制
概念
异常是指程序执行过程中可能出现的非正常情况,在 Java 中以类和对象的形式存在。Java 异常机制提高程序健壮性和容错性。
- 异常上抛机制
指发生异常时,创建异常对象并将其上抛给调用者,需要在方法声明位置上使用 throws 关键字。 - 异常捕捉机制
指发生异常时,创建异常对象并将其捕捉,需要在方法体内使用 try {} catch {} 语句块。 - 两者比较
异常上抛不允许后续代码执行,异常捕捉允许。
注意:如果一直上抛异常到 JVM 虚拟机,那么 JVM 会终止程序执行(main 方法不建议上抛)。
异常分类
- Error :不可处理的错误,直接退出 JVM 虚拟机
- Exception :可以处理的异常
- 编译时异常:编写程序阶段必须预先处理的异常,否则编译不通过
- 运行时异常:编写程序阶段即使不预先处理也能通过编译的异常
编译时异常 VS 运行时异常:
- 相同点:都发生在运行阶段,异常机制实际上就是 new 异常对象,然后将其抛出,而 new 对象这一操作只能发生在运行阶段
- 不同点:编译时异常发生概率大,需要预处理;运行时异常发生概率小,不需要预处理。
异常对象常用方法
- exception.getMessage():获取异常简单的描述信息
- exception.printStackTrace():打印异常追踪的堆栈信息
相关关键字
- throw:表示在方法体中手动抛出一个异常对象
- throws:在方法声明中,表示此方法在被调用时必须处理异常
- try :不能单独出现,需要和 catch 或 finally 联合使用
- catch :内容可以是确切类型,也可以是其父类,可以写多个(遵循异常类型从小到大的顺序),编写时建议一个异常对应一个 catch 语句块(利于调试)
- finally :finally 语句块中的语句必定执行,通常用于释放或关闭资源
常见异常
NullPointerException:空指针异常
ClassCastException:类型转换异常
ArrayIndexOutOfBoundException:数组下标越界异常
NumberFormatException:数字格式化异常
ConcurrentModificationException:并发修改异常
InstantiationException:实例化异常
InterruptedException:中断异常
NotSerializableException:不可序列化异常
仅供参考,如有错误,感谢指正!