首先,java的异常Throwable分为Error类(错误类)和Exception(异常类),他是所有异常的子类,
- 所有的Java异常类都直接或间接地从Throwable类继承。
- 可以通过继承Exception类或Exception的某个子类来创建自己的异常类
异常可以从两个角度来分类:
1、从javaAPI的角度来说分为错误和异常
2、从程序员的角度分为必检错误和非必检错误
角度一:错误与异常角度
错误:
Error类描述的是内部系统错误,这样的错误很少发生。如果发生了Error,一般除了通知用户以及尽量稳妥地终止程序之外,其它几乎什么也做不了。
常见的Error
Java内存溢出 OutOfMemoryError。
程序中有死循环或方法的无限递归调用 StackOverflowError(堆栈溢出错误)
动态连接失败的错误。
通常java程序不应该捕捉这样的异常,也不会抛出这样的异常
异常:
异常类是用Exception类表示的,它描述的是由程序和外部环境所引起的错误,这些错误能够被程序捕获和处理。
Exceptin类有一个重要的子类是RuntimeException类,RuntimeException类通常是由Java虚拟机抛出的。它描述的是由程序和外部环境所引起的错误,这些错误能够被程序捕获和处理。
常见的RuntimeException类有:
1.空指针异常 NullPointerException
2.数组下标越界异常 ArrayIndexOutOfBoundsException
3.数学运算中除以0的情况 ArithmeticException
4.传递给方法的参数非法或不合适 IllegalArgumentException
而Runtime以外的异常有:
1.试图使用一个不存在的类 ClassNotFoundException
2.在读取文件时产生的异常 IOException
3.访问关系数据库类产生的异常 SQLException
角度二:必检错误和非必检错误的角度
所有的Error、RuntimeException及其子类都属于 unchecked exception 非检查异常
其他异常属于 checked exception 必检异常
checked exception 必检异常的含义是可能产生这些类型异常的代码 必须采用try‐catch结构进行异常处理,或者 在方法头部中使用throws关键字进行声明。而unchecked exception 非检查异常 不需要try-catch,也不需要throws
如:使用数组时,对可能会产生的数组下标越界异常或超大数组分配失败导致的内存溢出错误,编程时都不需要额外进行处理。
因为 下标越界ArrayIndexOutOfBoundsException属于RuntimeException,而内存溢出OutOfMemoryError则属于Error。