Java编程思想---第十二章 通过异常处理错误(上)

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

  Java的基本理念是“结构不佳的代码不能运行”。发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前,然而编译期间并不能找出所有的错误,余下的问题必须在运行期间解决,这就需要错误源能通过某种方式,把适当的信息传递给某个接收者,而这个接收者将知道如何正确处理这个问题。

 

12.1 概念

 

  “异常”这个词有“对此感到意外”的意思,问题出现了,我们也许不清楚该怎么处理,但是我们的确知道不应该置之不理,要停下来看看是不是有别人或在别的地方能够处理这个问题,只是当前的环节中还没有足够的信息来解决这个问题,所以就把这个问题提交到一个更高级别的环境中,在这里将作出正确的决定。

  使用异常所带来的另一个相当明显的好处是,他往往能够降低错误处理代码的复杂度,如果不使用异常,那么就必须检查特定的错误,并在程序中的许多地方去处理它;而如果使用异常,就不必在方法调用处进行检查,因为异常机制将保证能够捕获这个错误,而且只需在一个地方处理错误,即所谓的异常处理程序中,这种方式不仅节省代码,而且把描述在正常执行过程中做什么事的代码和出了问题怎么办的代码相分离。总之,与以前的错误处理方法相比,异常机制使代码的阅读、编写和调试工作更加井井有条。

 

12.2 基本异常

 

  异常情形是指阻止当前方法或作用域继续执行的问题。把异常情形与普通问题相区分很重要,所谓的普通问题是指在当前环境下能得到足够的信息,总能处理这个错误。而对于异常情形,就不能继续下去了,因为在当前环境下无法获得必要的信息来解决问题,你所能做的就是从当前环境跳出,并把问题提交给上一级环境,这就是抛出异常时所发生的事情。除法的除数为0就是一个简单的例子。

  当异常抛出后,首先同Java其他对象的创建一样,将使用new在堆上创建异常对象,然后当前的执行路径被终止,并且从当前环境弹出对异常对象的引用,此时异常处理机制接管程序,并开始寻找一个恰当的地方来继续执行程序。这个恰当的地方就是异常处理程序。他的任务是将程序从错误状态中恢复,以使程序能换一种方式运行,或者继续运行。

 

12.3 捕获异常

 

12.3.1 try块

 

  如果在方法内部抛出了异常,或者在方法内部调用的其他方法抛出了异常,这个方法将在抛出异常的过程中结束,要是不希望方法就此结束,可以在方法内设置一个特殊块来捕获异常,这就是try块:

try {
  //codes
}

 

12.3.2 异常处理程序

 

  当然,抛出的异常必须在某处得到处理,这个地方就是异常处理程序,而且针对每个要捕获的异常,得准备相应的处理程序:

try {
  //codes
} catch (Type id1) {
  //handle code of type1
} catch (Type id2) {
  //handle code of type2
}

每个catch子句都是接收一个且仅接收一个特殊类型的参数的方法,必须紧跟在try块之后,当异常被抛出时,异常处理机制就搜寻参数与异常类型匹配的第一个处理程序,然后进入catch子句执行,此时认为异常得到了处理,一旦catch子句结束,则处理程序的查找过程结束。

猜你喜欢

转载自www.cnblogs.com/parable/p/11574637.html