5.1 异常概念 :
在程序运行的过程中发生的一些不正常事件就称为异常(如:数组下标越界、除0错、文件找不到等等)。请看如下示例: 【例5-1】计算总分和均分,出现数组下标越界和除0错异常。
对于以上错误,过程式程序设计语言(如C)使用if语句进行条件判断。但这增加了程序的复杂度,而且程序设计人员也很难预先估计所有可能出现的错误情况,并对其进行处理。
Java中引入了异常类,Java程序在运行中,当发生一个可以识别的异常时,就产生该异常类对应的一个异常对象,系统中就会有相应的机制来处理该异常,确保它不会对系统本身产生影响。这种异常处理机制很好地提高了异常处理的效率。
5.2 异常的层次结构 :
错误也可分成两种: 1)编译错误 2)运行错误
而运行错误又可分成以下两种: 1)系统运行错误(Error) 2)逻辑运行错误(Exception)
以上两个异常类都是继承于Throwable类,下图展示了Java异常类的继承关系
5.3 异常处理 :
5.3.1 异常的捕获与处理
为了防止和处理异常,Java提供了语句try-catch-finally来捕获和处理异常,该语句的格式如下:
try{ //可能产生异常的代码段 }
catch(ExceptionType1 e){ //异常处理1 }
[catch(ExceptionType2 e){ //异常处理2 }
……
catch(ExceptionnTypeN e) { //异常处理N }]
[finally{ //不管异常是否发生总要执行的代码 }]
5.3.2 异常的抛出 :
1. 使用throw抛出异常
throw语句的格式如下: throw ExceptionInstance;
2.使用throws抛出异常 使用throws抛出异常的格式如下:
类型 方法名(类型 参数1,…) throws 异常类1,…,异常类n { //方法代码 }
注意:一旦使用了throws语句声明抛出异常,就不用再使用try...catch来捕获异常了。
5.4 用户自定义异常 :
虽然使用Java内置的异常类可以描述在编程时出现的大部分异常情况,但是为了扩展异常处理的空间,Java允许用户自定义异常类。 用户自定义异常类只需继承Exception类或其子类即可。