第十二章 通过异常处理错误
1、概念
因为异常机制将保证能够捕获这个错误,所以不用小心翼翼的各种去检查。而处理错误只需要在一个地方完成,那就是 异常处理程序。
2、基本异常
异常情形是指阻止当前方法或作用域继续执行的问题。
异常处理程序将程序从错误状态中恢复,以使程序要么换一种方式运行,要么继续运行下去。
在没有其它办法的情况下,异常允许我们强制程序停止运行,并告诉我们出现了什么问题。理想状态下,还可以强制程序处理问题,并返回到稳定状态的。
异常参数:
用new在堆上创建异常对象,所有标准异常类都有两个构造器,一个默认的,一个带参的。
能够抛出任意类型的Throwable对象,它是异常类型的根类。
3、捕获异常
监控区域是一个可能产生异常的代码,并且后面跟着处理这些异常的代码。
如果在方法内部抛出了异常,那么这个方法就此结束。如果不希望这个方法结束,那么可以在方法内设置一个特殊的块来捕获异常,即try块。为什么叫try呢,因为在这个块里“尝试”各种可能产生异常的方法进行调用,所以是try。
try {
// Code that might generate exceptions
} catch(Type1 id1)|{
// Handle exceptions of Type1
} catch(Type2 id2) {
// Handle exceptions of Type2
} catch(Type3 id3) {
// Handle exceptions of Type3
}
异常抛出后,异常处理机制将搜索参数与异常类型相匹配的第一个处理程序,进入catch语句处理,此时认为异常的到了处理。catch子句结束,则处理程序不再往下找匹配了。
终止与恢复:
异常处理理论上有两种基本模型,java支持终止模型。该模型假设错误非常关键,一旦异常被抛出,那么错误已经无可挽回,程序不能继续执行。
另一种模型是恢复模型,就是先修正错误,然后重新进入该方法。这个模型假定了修正完之后再进入执行一定会成功。
相比较终止模型还是比较占优的,因为恢复模型需要了解异常抛出的地点,麻烦。
4、创建自定义异常
public MyException() {}
public MyException(String msg) { super(msg); }
}
System.out.println("Throwing MyException from g()");
throw new MyException("Originated in g()");
}
at FullConstructors.f(FullConstructors.java:11)
at FullConstructors.main(FullConstructors.java:19)