异常的念 AvA 什么是异常? 异常实际上是程序中错误,导致中断了正 常的指令流的一种事件 在程序执行中,任何中断正常程序流程的 异常条件就是错误或异常。例如,发生下 列情况时,会出现异常: 1)想打开的文件不存在 2)网络连接中断 3)受控操作数超出预定范围 非常感兴趣地正在装载的类文件丢失 JAVA
异常的概念 什么是异常? 异常实际上是程序中错误,导致中断了正 常的指令流的一种事件. 在程序执行中,任何中断正常程序流程的 异常条件就是错误或异常。例如,发生下 列情况时,会出现异常: 1) 想打开的文件不存在 2) 网络连接中断 3) 受控操作数超出预定范围 4) 非常感兴趣地正在装载的类文件丢失
AvA 异常的概念 在Java编程语言中,异常类定义程序中可能遇到 的轻微的错误条件。可以写代码来处理异常并继 续程序执行,而不是让程序中断。 个异常通常表明出现一个错误,之所以这样称 呼是因为java程序中的错误就是规则的异常情况。 当然异常并不总表示错误,它也可以表明在程序 中出现了一些特别不寻常的事件,需要引起特别 注意 ○但并非程序中的所有错误都需要由异常来指出。 异常用于指出可能出现的不寻常的、灾难性的情 况。例如一个用户在程序中输入的信息不正确是 JAVA 种普通事件,不应该由异常来处理
异常的概念 在Java编程语言中,异常类定义程序中可能遇到 的轻微的错误条件。可以写代码来处理异常并继 续程序执行,而不是让程序中断。 一个异常通常表明出现一个错误,之所以这样称 呼是因为java程序中的错误就是规则的异常情况。 当然异常并不总表示错误,它也可以表明在程序 中出现了一些特别不寻常的事件,需要引起特别 注意。 但并非程序中的所有错误都需要由异常来指出。 异常用于指出可能出现的不寻常的、灾难性的情 况。例如一个用户在程序中输入的信息不正确是 一种普通事件,不应该由异常来处理
以常规方法处理错误 AvA open Files; read-file i if(the FileoPen)( openTheFile; determine the lenth of the file determine its size if (gotThe Filelength) i allocate that much allocate that much memory; memory if(gotEnoughMemory( closeThe file: read the file into memory; if (read Failed) error Code=-1; else errorCode=-2; else error Code=-3 else error Code=4; J 没有处理错 误的程序 else errorcode=-s JAVA
以常规方法处理错误 openFiles; if (theFilesOpen) { determine the lenth of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) errorCode=-1; else errorCode=-2; } else errorCode=-3 } else errorCode=-4 ; } else errorCode=-5; read-file { openTheFile; determine its size; allocate that much memory; closeTheFile; } 没有处理错 误的程序:
AvA 用异常的形式处理错误 )观察前面的程序你 read-File: i try i 会发现大部分精力 open The file 花在出错处理上了。 determine its size; allocate that much memory 2)只把能够想到的错 close The file: 误考虑到,对以外chu opens alle 的情况无法处理。 i dosomething catch(sizeDetermineFailed) 3)程序可读性差。 (dosomething: j 出错返回信息量太(0e 少。 catch(readFailed) i dosomething l catch (file Closefailled) JAVA &dosomething; 3
用异常的形式处理错误 1) 观察前面的程序你 会发现大部分精力 花在出错处理上了。 2) 只把能够想到的错 误考虑到,对以外 的情况无法处理。 3) 程序可读性差。 4) 出错返回信息量太 少。 read-File; { try { openTheFile; determine its size; allocate that much memory; closeTheFile; }catch(fileopenFailed) { dosomething; } catch(sizeDetermineFailed) {dosomething;} catch(memoryAllocateFailed) { dosomething;} catch(readFailed) { dosomething;} catch(fileCloseFailed) { dosomething; }}
AvA 异常的概念 o和传统的方法比较异常的优点 1)把错误代码从常规代码中分离出来 2)把错误传播给调用堆栈 按错误类型和错误差别分组 4)系统提供了对于一些无法预测的错误的捕获和处理 5)克服了传统方法的错误信息有限的问题 method4 产生异常 class ExcepTest method3传 i public void main(String argsI i int b=0; int a; method2|递 try( a=4/b; 3 method1 System. out. println(“ divided by0”) JAVA }
异常的概念 和传统的方法比较异常的优点: 1) 把错误代码从常规代码中分离出来 2) 把错误传播给调用堆栈 3) 按错误类型和错误差别分组 4) 系统提供了对于一些无法预测的错误的捕获和处理 5) 克服了传统方法的错误信息有限的问题 method1 method2 method3 method4 产生异常 传 递 处理异常 class ExcepTest { public void main(String args[]) { int b=0; int a; try { a=4/b;} catch(ArithmeticException e) { System.out.println(“divided by 0”); } }}
Java异常继承关系图 只有它的后 AVA 代才可以作 Throwable 为一个异常 被抛出 Error Exception 各种错误子类 Runtime Non Runtime Exception Exception 由java虚拟机 各种运行 各种非运行 生成并抛出 异常子类异常子类 一般不作处理 不应捕获的异常 可以捕获的异常 JAVA
Java异常继承关系图 Throwable Error Exception Runtime 各种错误子类 Exception Non_Runtime Exception 各种运行 异常子类 各种非运行 异常子类 只有它的后 代才可以作 为一个异常 被抛出 由java虚拟机 生成并抛出。 一般不作处理 不应捕获的异常 可以捕获的异常
AvA 异常的分类 所有的异常都起源于 growable,但是 Throwable立即被分为两个分支。即使用 子类异常中的一个来描述任何特殊异常。 O Error分支用于java运行时系统的内部错误 和资源耗尽错误,它表示恢复不是不可能 但很困难的情况下的一种严重问题。比如 说内存溢出。 管图终止程序以外基本上无能为)9 当一个这种内部错误发生时,除了通知用 这种情况较为少见。 JAVA
异常的分类 所有的异常都起源于Throwable,但是 Throwable立即被分为两个分支。即使用 子类异常中的一个来描述任何特殊异常。 Error分支用于java运行时系统的内部错误 和资源耗尽错误,它表示恢复不是不可能 但很困难的情况下的一种严重问题。比如 说内存溢出。 当一个这种内部错误发生时,除了通知用 户并试图终止程序以外基本上无能为力。 这种情况较为少见
AvA 异常的分类 当进行java编程时,你需要把重点放在 Exception分支上。 Exception分为两支: 1)派生自 Runtime Exception的异常。 2)不是这样的。即 Non Runtime Exception 产生一个 RuntimeException的原因是编程 错误。表示一种设计或实现问题。也就是 说,它表示如果程序运行正常,从不会发 生的情况。而任何其他异常的出现是因 为你的好程序碰上了一个意外情况,例如 个Ⅳ/O错误等。 JAVA
异常的分类 当进行java编程时,你需要把重点放在 Exception分支上。Exception分为两支: 1) 派生自RuntimeException的异常。 2) 不是这样的。即Non_Runtime Exception。 产生一个RuntimeException的原因是编程 错误。表示一种设计或实现问题。也就是 说,它表示如果程序运行正常,从不会发 生的情况。 而任何其他异常的出现是因 为你的好程序碰上了一个意外情况,例如 一个I/O错误等
异常的分类 AvA 派生自 RuntimeExcepignl的另学 1)一个错误的造型转换。 记住一个规则: 如果它是一个 2) 个越界数组的访问。 Runtime Exceptio 3)一个空指针访问。 n,那么这是你的 错。 o非继承自 RuntimeException的异常 1)试图读取一个文件结尾后面的数据。 2)试图打开一个错误的URL。 3)试图根据一个根本不代表任何已存在类的字符 串来找到一个 Class异常。 JAVA
异常的分类 派生自RuntimeException的异常: 1) 一个错误的造型转换。 2) 一个越界数组的访问。 3) 一个空指针访问。 非继承自RuntimeException的异常: 1) 试图读取一个文件结尾后面的数据。 2) 试图打开一个错误的URL。 3) 试图根据一个根本不代表任何已存在类的字符 串来找到一个Class异常。 记住一个规则: 如果它是一个 RuntimeExceptio n,那么这是你的 错