一、引言:本短文简单介绍了异常处理机制中需要注意的问题,比较浅显,意在查漏补缺。
二、Java异常处理机制的五个关键字:try, catch, finally, throw, throws
try : 代码监控,监控可能产生异常的代码块。
catch:捕获异常。抛出的异常必须在某处得到处理,catch紧跟在try后,表示异常处理程序
finally:清理工作,主要用来内存回收,关闭资源等。
throw:抛出异常
throws:表示异常发生的可能性,放在方法函数头。
三、try{}catch{}finally{}执行顺序
public class ExceptionSilencer { static int i = 0;//用来记录程序的执行顺序 public static void main(String[] args){ try { System.out.println("try block , i = " + (++i)); throw new RuntimeException(); }finally { System.out.println("finally block, i = " + (++i)); // return; } } }
1. 多个catch块时,只匹配其中一个异常类并执行catch块代码,而不会执行后面的catch块,因此在防止多个catch块时需要;考虑顺序,一般将Exception基类异常放到最后面。
2. finally代码块无论try-catch是否顺利执行完毕,都会执行。那么什么情况下finally代码块会不执行呢?在finally代码块中发生异常;在前面代码中使用了System.exit退出程序;程序所在线程死亡;关闭CPU
3. 当程序执行try块、catch块时遇到return语句或throw语句,这两个语句都会导致该方法立即结束,所以系统并不会立即执行这两个语句,而是去寻找该异常处理流程中的finally块,如果没有finally块,程序立即执行return语句或throw语句,方法终止。如果有finally块,系统会立即开始执行finally块,只有当finally块执行完成后,系统才会再次跳回来执行try块、catch块里的return或throw语句;如果finally块里也使用了return或throw等导致方法终止的语句,则finally块已经终止了方法,不用再跳回去执行try块、catch块里的任何代码了。
验证上述结论可通过上面给出的代码验证。