第十二章 通过异常处理错误

异常情形是指阻止当前方法或作用域继续执行的问题。当抛出异常后,有几件事会随之发生。首先,同Java中其他对象的创建一样,将使用new在堆上创建异常对象。然后,当前的执行路径被终止,并且从当前环境中弹出对异常对象的引用。此时,异常处理机制接管程序,并开始寻找一个恰当的地方来继续执行程序。这个恰当的地方就是异常处理程序,它的任务是将程序从错误状态中恢复,以使7程序能要么换一种方式运行,要么继续运行下去。

所有标准异常类都有两个构造器:一个是默认构造器;另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器:

       throw new NullPointerException(“t=null”);

1.捕获异常

要明白异常是如何被捕获的,必须首先理解监控区域的概念:try块,然后对抛出的异常进行处理程序,到某一点进行处理,用关键字catch表示。

异常处理理论上有两种基本模型。Java支持终止模型和恢复模型,程序员倾向于终止模型。

2.捕获所有异常

可以只写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类Exception,就可以做到这一点:

Catch(Exception e){

 System.out.println(“Caught an exception”);

}

这将捕获所有异常,所以最好把它放在处理程序列表的末尾,以防它抢在其他处理程序之前先把异常捕获了。

3.重新抛出异常:

有时希望把刚捕获的异常重新抛出,尤其是在使用Exception捕获所有异常的时候。既然已经得到了对当前异常对象的引用,可以直接把它重新抛出:

重抛异常会把异常抛给上一级环境中的异常处理程序,同一个try块的后续catch子句将被忽略。

 

4.使用finally进行清理:

对于一些代码,可能会希望无论try块中的异常是否会抛出,它们都能得到执行,此时可使用finally进行执行。对于java而言,因为含有垃圾回收机制所以内存总能得到释放,而可用finally清理的资源包括很多:例如:清理已经打开的文件或网络连接,在屏幕上画的图形等。

5.异常匹配:

抛出异常的时候,异常处理系统会按照代码的书写顺序找出“最近”的处理程序。找到匹配的处理程序之后,它就认为异常将得到处理,然后就不再继续查找。

查找的时候并不要求抛出的异常同处理程序所声明的异常完全匹配。派生类的对象也可以匹配其基类的处理程序。

原文地址:https://www.cnblogs.com/xiaobaidashu/p/12288462.html