1. Exception:程序本身可以捕获并且可以处理的异常
编译时异常:编译期就会检查的异常,若调用的方法中throw了此类异常,则必须进行显式处理处理(用try…catch捕获或者throws向上抛出),否则无法通过编译。常见的例如IOException、ClassNotFoundException等。
RuntimeException:运行时异常,常见的比如空指针异常、访问越界异常。此类异常编译期不会检查,就算throw了不显式处理也能通过编译。若不显式处理 运行时遇到此异常则调用其内部默认的方法并打印出错误栈。
有人可能会问有时候我自己写的代码里没有看到IOException、ClassNotFoundException这些异常呀,为什么运行时还会抛出?这是因为你代码中调用的库方法中有抛出并在其内部就捕获处理了,看错误栈就知道了
2. Error:程序中无法处理的错误,jvm中出现问题
VirtualMachineError:虚拟机运行时抛出的异常,例如内存溢出错误OutOfMemoryError、StackOverFlowError。
AWTError: Java AWT (Abstract Window Toolkit) 中的一个 Error 异常
整体结构如下图,其中箭头表示继承关系
异常分类又可分为受检异常和非受检异常,受检异常即编译时异常,其他都是非受检异常