- Java中的所有异常都来自顶级⽗类
Throwable
。 - Throwable下有两个子类
Exception
和Error
。Error
表示⾮常严重的错误,⽐如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError, 通常这些错误出现时,仅仅想靠程序自己是解决不了的,可能是虚拟机、磁盘、操作系统层面出现的问题了,所以通常也不建议在代码中去捕获这些Error,因为捕获的意义不大,因为程序可能已经根本运行不了了。Exception
表示异常,表示程序出现Exception时,是可以靠程序自己来解决的,比如 NullPointerException、IllegalAccessException等,我们可以捕获这些异常来做特殊处理。
Exception
的⼦类通常又可以分为RuntimeException
和非RuntimeException
两类RunTimeException
表示运行期异常,表示这个异常是在代码运⾏过程中抛出的,这些异常是非检查异常,程序中可以选择捕获处理,也可以不处理。这些异常⼀般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发⽣,比如NullPointerException、IndexOutOfBoundsException等。- 非
RuntimeException
表示非运行期异常,也就是我们常说的检查异常,是必须进行处理的异常,如果不处理,程序就不能检查异常通过。如IOException、SQLException等以及用户自定义的Exception异常。