Java中的异常处理机制只要实现自Throwable接口,继承关系如下:
可以看出异常处理主要分为两种:
1. Error
表示恢复不是不可能但很困难的情况下的一种严重问题。比如说底层系统出新错误。不可能指望程序能处理这样的情况。
2.Exception
表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
3. Exection又可以分为两种:
- 非运行时异常(Checked Exception)
- 运行时异常(RuntimeException)
4. 运行时异常:
- 定义:RuntimeException及其子类都被称为运行时异常。
- 特点:Java编译器不会检查它。 也就是说,当程序中可能出现这类异常时,如果"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常等,都属于运行时异常。
- 如果产生运行时异常,则需要通过修改代码来进行避免
5. 非运行时异常:
- 定义:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于非运行时异常。
- 特点:Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编
- 非运行时异常通常是可以恢复的。
6. Error错误:
- 定义:Error类及其子类。
- 特点:和运行时异常一样,编译器也不会对错误进行检查。当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。例如内存溢出。
- 程序本身无法修复这些错误的,一般要重启程序。