Java异常处理机制

一、引言:本短文简单介绍了异常处理机制中需要注意的问题,比较浅显,意在查漏补缺。

二、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块里的任何代码了。

验证上述结论可通过上面给出的代码验证。



  

技进乎艺,艺进乎道
原文地址:https://www.cnblogs.com/weekend/p/6942245.html