您的位置:首页 > 其它

第十二章 异常处理 概念和基本使用

2016-08-29 22:10 239 查看

1.为什么要有异常处理

Java的基本理念是结构不佳的代码不能运行。
why:发现错误的理想时机是在编译阶段,余下的问题在运行期间解决,这就需要错误源能通过某种方式,把适当的信息传递给某个接受者【异常处理机制指导如何传递】——该接受者将指导如何正确处理这个问题(catch块)。

2.异常处理机制是什么,作用

Java使用异常来提供一致的错误报告模型,使得构件(报告模型)能够与客户端代码可靠地沟通问题,以达到创建健壮系统的目的。、
java异常处理的目的在于通过使用少于目前数量的代码来简化大型、可靠程序的生成,:“你的程序中没有未处理的错误”。
异常处理是Java中唯一正式的错误报告机制,并且通过编译器强制执行。
异常处理很早以前就已经出现啦,C++的异常处理机制基于Ada,Java的异常处理基于C++;
异常这个词有“我对此感到意外的意思”。
异常处理可以降低错误处理代码的复杂度,如果不使用异常,就必须检查特定的错误,如一个引用是否为空(if(o == null))

而异常机制将保证能够捕获这个异常,并在异常处理程序中处理这个错误【即catch块中】。

这把“描述在正常执行过程中做什么事”和“除了问题怎么办”的代码相分离。

3.基本异常 抛出异常

异常情形:是指阻止当前方法或作用于继续执行的问题。(return 和break 抛出异常都可实现)

对于异常情形,就是不能执行下去,因为在当前的环境下无法获得必要的信息解决问题,所能做的就是从当前环境跳出

并且把问题提交给上一级环境(如抛出异常【跳出】和捕获异常(处理环境) 或跳转到登录页)。这就是抛出异常时发生的事情。
基本异常的创建执行过程:

使用new在堆上创建对象,
当前的执行路径被终止,不能执行下去,并且从当前环境中弹出对异常对象的引用(throw抛出异常对象).
然后,异常处理程序接管程序,并开始寻找一个恰当的地方来继续执行程序。这个恰当的地方就是异常处理程序(catch块)。

异常处理程序的任务是将程序从错误状态中恢复,以使程序能换一种方式执行或继续运行下去。

if (t == null) {
//抛出异常,
throw new NullPointerException();
}
将错误信息从当前环境中抛出,错误信息将会传播到异常处理机制中去。
异常允许我们强制程序停止运行,并告诉我们出现了什么问题,或者强制程序处理问题,并返回到稳定状态。
如果发生问题,异常将不允许程序沿着正常的路径继续走下去。
事务是计算机中的合同法,如果出了什么问题,只需要放弃整个计算。异常使我们可以把每件事当做一个事务来处理。

还可以看做是一个内建的恢复系统。

4.异常参数 创建异常

使用new在堆上创建异常对象,这也伴随着存储空间的分配和构造器的调用。
所有的标准异常类都有两个构造器,一个是默认构造器,另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器
throw new NullPointerException("t == null");

使用new创建异常对象之后,此对象的引用将传给throw。
返回异常对象类型与方法设计的返回类型不同,但从效果上看,它就像从方法中返回的一样。
可以把异常处理看成一种不同的返回机制。
可以用抛出异常的方式从当前的作用域退出。这两种情况下,都将会返回一个异常对象,然后退出方法或作用域。

5.不同的异常

Throwable对象是异常类型的根类。
对于不同的错误,要抛出相应的异常。错误信息可以保存在异常对象内部或者用异常类的名称来暗示。

上一层环境通过这些信息来决定如何处理异常。(通常异常对象中仅有的信息就是异常类型,除此之外不包含任何有意义的内容。)

6.捕获异常

如果在方法内部抛出了异常(或者在方法内部调用其他抛出异常的方法),这个方法将在抛出异常的过程中结束。

如果不希望方法就此结束,可以设置try块来捕获异常(并在catch内处理异常),并尝试方法调用(可能产生的异常)。
有了异常处理机制,可以在方法内设置一个特殊的块来捕获异常。

然后秩序在一个地方就可以捕获所有异常。
异常处理程序:异常处理程序紧跟在try块之后,以关键字catch表示:

try{

}catch (Type1 id1) {
// TODO: handle exception
}catch (Type2 id3) {
// TODO: handle exception
}catch (Type3 id3) {
// TODO: handle exception
}


每个catch子句像是接收仅且只有一个参数的方法。有时异常的类型已经给了足够的信息来对异常进行处理,但参数标识符(id1···)不可省略。
当异常被抛出时,异常处理机制将负责搜寻参数与异常类型相匹配的第一个处理程序。
然后进入catch子句执行,此时认为异常得到了处理。

一旦catch子句结束,则处理程序的查找过程结束。
只有匹配的catch子句才能够得到执行。许多不同的方法调用可能会产生相同类型的异常,只需要提供一个只对此类型的catch即可。
终止和恢复:

终止模型:java支持终止模型,一旦异常抛出,就表示错误已无法挽回,也不能回来继续执行。
恢复模型:希望异常被处理之后能继续执行程序。
如果想使用java实现恢复模型,就不能使用异常处理机制,或把try块放到while循环里,直到得到满意的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐