第八章 java的异常处理

异常指的是程序在运行时发生的错误或不正常的状况。

一、异常处理的基础知识:程序运行时经常会出现一些非正常的现象,如除数为0、文件不存在、文件不能打开、数组下标越界、内存不够用等,这些非正常现象被称为运行错误。根据错误性质可将运行错误分为两类:致命性的错误和非致命性的错误。

1、      致命性错误:如程序进入死循环,或递归无法结束,或内存溢出,这些运行错误是致命性的。致命性的错误只能在编程阶段解决,运行时程序本身无法解决,只能依靠其他程序干涉,否则会一直处于非正常状态。

2、      非致命性的异常:如运算时除数为0,或操作时超出数据范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络中断等,这类现象被称为非致命性的异常。Java通过在源程序中加入异常处理代码,当程序运行中出现异常时,由异常处理代码调整程序运行方向,使程序仍可以继续运行直至正常结束。

3、      目前大多数面向对对象的语言提供了异常处理机制,而错误处理一般由系统承担,语言本身并不提供错误处理机制。

二、异常处理的类层次:java通过错误类(Error)和异常类(Exception)类来处理错误和异常,而它们都是Throwable类的子类。

三、异常处理机制:使用try-catch-finally语句捕获和处理异常。

1、      形式:try{//程序块}catch(Exception e){}finally{};

2、      try和catch:在java中为防止和处理一个运行时的错误,只需要把有可能引发异常的代码放进一个try块中,try块后面应包含一个或多个catch子局来指定用户想要捕捉的“异常”的类型。

3、      例如:

public class TestException{
public static void main(String[] args){
     try{
         int d=0;
         int a=4/d;
}catch(Exception e){
     System.out.println(e.getMessage);
}
} 
}

4、多个catch子句:某些情况下,由单个代码段可能引起多中异常。这时可以放置多个catch子句,每个catch子句捕获一种类型的异常。当异常被发现时,catch子句被依次检查,第一个匹配异常类型的子句执行。这里的类型匹配指的是catch所处理的异常类型与生成的异常对象的类型完全一致或者是它的父类。当一个catch语句执行以后,其他的catch子句被跳过,从try/catch块以后的代码继续执行。一个异常对象能否被一个catch块接收主要看该异常对象与catch块中声明的异常类的匹配情况,当它们满足下面条件中的任一条时,异常对象将被接受:

异常对象是catch块中声明的异常类的实例;

异常对象是catch块中声明的异常类的子类的实例;

异常对象实现了catch块中声明的异常类的接口。

当使用多个catch块时,需注意catch子句排列顺序--先特殊到一般,也就是子类在父类前面。如果子类在父类后面,子类将永远不会到达。

5.try语句的嵌套一个try语句可以在另一个try块内部----try语句的嵌套。

每次进入try语句,异常的前后关系都会被压入堆栈。如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配。

这个过程将继续直到一个catch语句匹配成功,或者是直到所有的嵌套try语句被检查耗尽。

如果没有catch语句匹配,Java的运行时系统将处理这个异常。