1. 简介
异常类继承图
Java的错误类(Error
)和异常类( Exception
)都是 Throwable
的子类,基本由这两大类展开的。 Error
Error
这个类通常指的是系统级的错误,如OutOfMemoryError
(内存溢出)、StackOverflowError
(栈溢出)这些错误,当出现这些错误时基本是系统问题,基本不能通过捕获去恢复,所以不要求捕获或声明。此时可以由它抛出异常然后记录下来,事后分析。
Exception
Exception
其实也分为两类异常
不受检查异常(RuntimeException)
不受检查异常即是RuntimeException
和RuntimeException
的子类,如NullPointerException
(空指针异常)、ArrayIndexOutOfBoundsException
(数组下标越界异常)、IllegalArgumentException
(非法参数异常)。这类异常不要求try catch
捕获或throws
声明抛出,因为出现此类异常通常是由于代码问题,如果任由程序运行下去可能会出现意想不到后果,所以不应该捕获处理试图恢复。
受检查异常
受检查异常即除了RuntimeException
外Exception
类和Exception
下的子类,如InterruptedException
、IOException
。出现此类异常必须在编译前捕获或声明抛出,否则编译不通过。此类异常通常是可以捕获并有效处理所以不能忽略。
2. 注意
- 只针对异常的情况使用异常机制,不应该将他们用于正常的控制流
- 对可恢复的情况使用受检查异常,对编程错误使用运行时异常
- 避免不必要地使用受检查异常
- 优先使用标准的异常(JDK中的异常)
- 不要忽略异常