1. Java异常类层次结构图
2. Throwable是所有异常类的父类。有两个重要的子类:Exception和Error。
Error:是程序无法处理的错误。通常是指程序运行时JVM出现的错误,例如outofmemory(内存不足)。
这是由于程序设计逻辑有问题,导致程序运行时,JVM本身出现了错误,所以是不可以被程序处理的。
Exception:是程序本身可以处理的异常。 例如空指针,算术运算错误,数组下标越界等等。
3. 常用Throwable的toString()方法打印异常信息。
toString()会调用getLocalizedMessage()方法,如果异常对象没有override该方法,则父类Throwable中默认是调用getMessage()方法。
4. 异常处理方法:
try():用于捕获异常。
catch(): 用于处理异常。
finally(): 无论是否捕获或者处理异常,finally()中的方法始终会被执行。
所以finally中常用来完成一些善后处理工作,例如文件资源或网络资源的释放等。
如果try()或者catch()中含有return语句,则finally()中的语句块会在return之前被执行。如果finally中也有return语句,则finally中return的值会覆盖掉try或catch中的return值。
5. finally()语句块不会被执行的三种情况:
a. 在执行finally语句块的第一句时,发生了异常。
所以应该确保finally语句块中不会发生异常。
b. 在执行finally语句块之前,调用了System.exit(int),exit的参数是非零的,即程序是非正常退出。
c. 程序所在线程死亡。
对于以上三点,其实只需注意第一点,对于后面的两点,程序都已经异常终止了,finally中的语句块执不执行已经没有意义了。