异常分类
总结
Throwable
1. Error 未检查异常(unchecked)
2. Exception
- RuntimeException 运行时异常/ 未检查异常(unchecked)
- IOExceptiont…. 已检查异常
异常的分类 :
- 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和 IOException等继承Exception,具体的RuntimeException继承RuntimeException。
Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
- RuntimeException异常=未检查异常(unchecked)
- 已检查异常(checked):IOException等
Unchecked Exception:
- 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。
- 包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。
- 语法上不需要声明抛出异常。
Checked Exception:
- 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等)
- 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。
- 需要try catch处理或throws声明抛出异常。
常见的几种RuntimeException异常如下:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
java异常的重写规则:
重写时,子类方法的异常小于(是父类异常的子类)或少于(经父类的异常少,或没有)父类方法的异常
java的重写规则:
对于异常重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以不抛出异常。