Java异常的分类及关系
所有异常的根类是java.lang.Throwable,下面有两个子类Error和Exception。
Error是程序本身无法克服恢复的严重问题。Exception是程序可以克服的异常。Exception分为系统异常和普通异常。
系统异常是软件本身开发的问题,通常需要改动代码才能解决问题,这种情况,程序使用者是无法感知并控制的。
普通异常是运行环境等问题造成的,这种情况是可以控制并作处理。
受检异常与非受检异常
普通异常是需要使用try..catch捕获异常,或用Throws抛给上层调用者处理,否则编译器是无法编译通过的。而系统异常是不强制捕获的,用户可以通过日志打印的堆栈信息定位问题所在。普通异常又称为受检(checked)异常,系统异常称为非受检(unchecked)异常。
RuntimeException与Error都是非受检异常,其他都是受检异常。
常见RuntimeException
1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。
2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序
试图通过字符串来加载某个类时可能引发异常。
3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。
4)java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。
5)java.lang.IllegalArgumentException 方法传递参数错误。
6)java.lang.ClassCastException 数据类型转换异常