文档介绍:第六章 Java的“异常”(例外)处理
“异常”指的是程序运行时出现的非正常情况。在用传统的语言编程时,程序员只能通过函数的返回值来发出错误信息。这易于导致很多错误,因为在很多情况下需要知道错误产生的内部细节。通常,用全局变量errno来存储“异常”的类型。这容易导致误用,因为一个errno的值有可能在被处理之前被另外的错误覆盖掉。即使最优美的C语言程序,为了处理“异常”情况,也常求助于goto语句。Java对“异常”的处理是面向对象的。一个Java的Exception是一个描述“异常”情况的对象。当出现“异常”情况时,一个Exception对象就产生了,并放到产生这个“异常”的成员函数里。
基础
Java的“异常”处理是通过5个关键词来实现的:try,catch,throw,throws和finally。用try来执行一段程序,如果出现“异常”,系统抛出(throws)一个“异常”,你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。下面是“异常”处理程序的基本形式:
try{//程序块}
catch(ExceptionType1 e){//对ExceptionType1的处理}
catch(ExceptionType2 e){//对ExceptionType2的处理 throw(e);//再抛出这个“异常”}
finally{}
"异常”的类型
在“异常”类层次的最上层有一个单独的类叫做Throwable。这个类用来表示所有的“异常”情况。每个“异常”类型都是Throwable的子类。Throwable有两个直接的子类。一类是Exception,是用户程序能够捕捉到的“异常”情况。我们将通过产生它的子类来创建自己的“异常
”。另一类是Error,它定义了那些通常无法捕捉到的“异常”。要谨慎使用Error子类,因为它们通常会导致灾难性的失败。在Exception中有一个子类RuntimeException,它是程序运行时自动地对某些错误作出反应而产生的,如ArithmeticException,IndexOutOfBoundsException等,因为这些例外的生成是很普遍的,不适合都处理。
Throwable Error AWTError
…
VirtualMachineError OutOfMemoryError
…
Exception RuntimeException
…
IOException
不捕捉“异常”
“异常”对象是Java在运行时对某些“异常”情况作出反应而产生的。例如,下面这个小程序包含一个整数被0除的“异常”。
class Exc0{
public static void main(String args[]){
int d=0;int a=42/d;
("Hello World!");
}
}
当Java执行这个除法时,由于分母是0,就会构造一个“异常”对象来使程序停下来并处理这个错误情况,在运行时“抛出”(throw)这个“异常”。说“抛出”是因为它象一个滚烫的马铃薯,你必须把它抓住并立即处理。程序流将会在除号操作符处被打断,然后检查当前的调