- java.lang.Throwable
- java.lang.Error
- java.lang.Exception
- java.lang.RuntimeException
Throwable是所以java异常或错误的超类,即指一切可抛出的内容。
Throwable包含2个子类:Error和Exception。
Error指的是严重问题如JVM内存溢出,不应该由代码捕获的异常或错误,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等,类似的错误没有比jvm更专业的了,交由jvm处理是最好的;
Exception指的是可以由代码捕获的错误,分为2类:CheckedException和UnCheckedException:
CheckedException指的是可检查异常,Java编译时会强制检查,必须用try...catch...来捕获,在编译时期需要做处理,否则编译不通过,如IOException等;
UnCheckedException值的是不可检查异常,可以不用catch的异常,包含RuntimeException及其子类,运行时期生产的异常,常见的如数组越界(ArrayIndexOutOfBoundsException),算术条件错误(ArithmeticException),空异常(NullPointerException),没有找到对应类(ClassNotFoundException)等;
- try...catch...finish..和throw处理逻辑
try后面可有多个catch和一个finally代码块,必须包含一个catch或finally;
try代码块抛出exception后,jvm会寻找合适的catch且只会执行一个catch模块,一旦别catch就不会再向上一级catch传递,所以catch时要把父类的exception写在最后,防止先执行了父类,后面的catch就没有意义了,如果没有最终没有找到对应的catch,则交由jvm来处理;
无论是否执行catch代码,finally模块都会执行,当try或catch中遇到reuturn语句,finally代码块会在return前被执行,在下面4中特殊情况下,finally代码块将不会执行:
- finally代码块中发生异常;
- 在前面代码中执行了System.exit()退出程序;
- 程序所在线程shutdown
- cpu被关闭