Java违例差错控制
Java 的基本原理就是“形式错误的代码不会运行”。
捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些问题必须在运行期间解决
“违例”( Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”
基本违例
“违例条件”表示在出现什么问题的时候应中止方法或作用域的继续,为了将违例条件与普通问题区分开,
违例条件是非常重要的一个因素
将与错误有关的信息发送到一个更大的场景中,方法是创建一个特殊的对象
用它代表我们的信息,并将其“掷”( Throw)出我们当前的
场景之外。这就叫作“产生一个违例”或者“掷出一个违例”
if(t == null)
throw new NullPointerException();
这样便“掷”出了一个违例。
违例创建
和 Java 的其他任何对象一样,需要用 new 在内存堆里创建违例,并需调用一个构建器
在所有标准违例中,
存在着两个构建器:第一个是默认构建器,第二个则需使用一个字串自变量,使我们能在违例里置入相关信息:
if(t == null)
throw new NullPointerException("t = null");
它首先执行 new 表达式,创建一个不在程序常规执行范围之内的对象。
随后,对象实际会从方法中返回—— 尽管对象的类型通常并不是方法设计为返回的类型。可将其想象成另一种返回机制
违例的捕获
若某个方法产生一个违例,必须保证该违例能被捕获,并获得正确对待。
它的一个好处就是允许我们在一个地方把问题抛出,然后在另一个地方对待来自那个代码内部的错误。
为理解违例是如何捕获的,首先必须掌握“警戒区”的概念
1、 t r y 块
若位于一个方法内部,并“掷”出一个违例
try 块属于一种普通的作用域,用一个 try 关键字开头
2、 违例控制器
catch(捕获)关键字标记,
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
}
捕获违例后,处理方式
1、“中断”,假定错误非常关键,没有办法返回违例发生的地方。无论谁只要“掷”出一个违例,就表明没有办法补救错误,而且也不希望再回来
2、“恢复”,它意味着违例控制器有责任来纠正当前的状况,然后取得出错的方法,假定下一次会成功执行。若使用恢复,意味着在违例得到控制以后仍然想继续执行
尽管“恢复”表面上十分不错,但在实际应用中却显得困难重重。其中决定性的原因可能是:
我们的控制模块必须随时留意是否产生了违例,以及是否包含了由产生位置专用的代码。这便使代码很
难编写和维护—— 大型系统尤其如此,因为违例可能在多个位置产生。
网友评论