zhouJava教案.ppt_第1页
zhouJava教案.ppt_第2页
zhouJava教案.ppt_第3页
zhouJava教案.ppt_第4页
zhouJava教案.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章 异常处理 第1节异常 一 基本概念程序中的错误 编译错误由于所编写的程序存在语法问题 未能通过由源代码到目标代码的编译过程而产生的错误 它将由语言的编译系统负责检测和报告 运行错误在程序的运行过程中产生的错误 异常是在程序运行中导致程序终止运行的事件 如要求程序执行以零为除数的除法 要求程序访问数组下标范围以外的数组元素 要求访问空对象内的信息或文件找不到等 为了加强程序的健壮性我们希望发生了错误之后 能将程序从出错状态转移到一个安全状态 使得系统能够恢复控制权 或者正常的结束程序的运行并保存数据 Java处理异常的核心任务是将系统的控制权从发生错误的指令处转移到错误处理的地方 可见 一个好的应用程序 除了具备用户要求的功能外 还要求能预见程序执行过程中可能产生的各种异常 并把处理异常的功能包括在用户程序中 二 Java进行异常处理的大致过程在Java中 是用面向对象的方法来处理异常的 在一个方法的运行过程中 如果发生了异常 则这个方法生成代表该异常的一个对象 并把它交给运行时系统 运行时系统寻找相应的代码来处理这一异常 我们把生成异常对象并交给运行时系统的过程称为抛出一个异常 throw 运行时系统在方法的调用栈中查找 从生成异常的方法开始回溯 直到找到包含相应异常处理的代码为止 这一过程称为捕获一个异常 catch 如果没有找到相应异常处理的方法 则运行时系统将终止程序的运行 程序 方法i RuntimeEnvironment 处理异常的方法 抛出异常 捕获异常 异常对象 如果一个方法本身能抛出异常 当所调用的方法出现异常时 调用者可以捕获异常使之得到处理 也可以回避异常 这时异常将在调用的堆栈中向下传递 直到被处理 三 Java异常处理机制的优点异常错误处理代码与代码分离 异常处理把错误报告给方法调用堆栈 异常处理把错误按类型分类 由于把异常事件当成对象来处理 利用类的层次性我们可以把多个具有相同父类的异常统一处理 也可以区分成不同的异常分别处理 非常灵活 四 Throwable类及其子类 类Throwable位于异常处理类层次的最顶层 只有它的后代可以作为一个异常被抛出 类Throwable有两个直接子类 Error和Exception 其中 Error类对象由JVM抛出 如系统内部错误或资源短缺等 所以不必对这类异常进行处理 Exception类对象由Java程序抛出并处理 它有各种不同的子类分别对应于不同类型的异常 其中类RuntimeException的对象代表运行时由JVM生成的异常 如ArithmeticException ArrayIndexOutOfBoundsException异常等 其它则为非运行时异常 如IOException等 可见 Exception类对象由应用程序处理或抛出 另外Java编译器要求Java程序必须捕获或声明所有非运行时异常 Exception类的主要方法 publicException publicException Strings publicStringtoString publicStringgetMessage 返回描述异常的详细信息 第2节异常处理 异常处理的种类 对运行时异常可以不做处理 由Java虚拟机自动进行处理 使用Try catch finally语句捕获处理 通过throws子句声明抛弃异常 定义自己的异常类 并用throw语句抛出 1 运行时异常 运行时异常是由Java运行时系统在程序的运行过程中检测到的 它可能在程序的任何部位发生 而且其数量可能很大 因此Java编译器允许程序不对它进行处理 这时 Java系统会把生成的运行时异常对象交给缺省的异常处理程序 在标准输出设备上显示异常的内容以及发生异常的位置 例如P177 例8 1又例如 classArrayOutOf publicstaticvoidmain String args char buf a b c inti for i 0 i buf length i System out println buf i System out println buf i 结果 abcExceptioninthread main java lang ArrayIndexOutOfBoundsExceptionatArrayOutOf main ArrayOutOf java 8 publicclassStringIndexOutOf publicstaticvoidmain Stringargs Stringstr abc System out println str charAt 3 结果 Exceptioninthread main java lang StringIndexOutOfBoundsException Stringindexoutofrange 3atjava lang String charAt String java 516 atStringIndexOutOf main StringIndexOutOf java 5 常见的运行时异常有 ArithmeticException如果程序除0 或对0取模 就会产生该异常 NullPointerException当一个程序试图访问一个空对象中的变量或方法 或一个空数组中的元素时就会产生该异常 如 classNull publicstaticvoidmain Stringargs Stringo null inta null o length a 0 0 ArrayIndexOutOfBoundsException当试图访问数组中的一个不存在的元素时 就会引发该异常 ClassCastException如果试图把对象o强制成ClassC 而o既不是ClassC的实例 也不是ClassC的子类的实例是就会产生该异常 如 classClassCast publicstaticvoidmain Stringargs Objecto newObject Strings String Strings String o Objecto Object s s length System out println o toString NegativeArraySizeException如果一个数组长度是负数就会产生该异常 ClassNotFoundException当指定名字的类或接口未找到时就会产生该异常 FileNotFoundException未找到指定的文件 InterruptedException当前线程在睡眠 等待或因其它原因暂停时被其它线程中断 UnknownHostException无法确定主机的IP地址时就会产生该异常 SecurityException安全性错误 如Applet欲读写文件 MalformedURLExceptionURL格式错 2 捕获异常并进行处理 用try catch finally语句来捕获一个或多个异常 格式为 try catch 异常类1e1 catch 异常类nen finally 被监视的块 该catch子句能够捕捉和处理的异常类型 无论被监视块是否出现异常 本块都执行 注意 try后面用 括起来的代码可能会抛出一个或多个异常 且该段代码也指出了它后面的catch语句所捕获的异常的范围 catch语句可以有多个 用来分别处理不同类型的异常 当try后 中的代码发生异常时 会生成一个异常对象 同时程序控制会从那一点终止跳出try块从catch块开始继续执行 当有多个catch语句时 Java运行时系统会从上到下分别对每个catch语句处理的异常类型进行检测 直到找到与异常类型相匹配的catch语句为止 因此 建议catch语句的排列顺序应是从特殊到一般的 也可以用一个catch语句处理多个异常类型 这时这个异常类型的参数应该是这多个异常类型的父类 无论try 是否抛出异常 也无论catch 是否执行 finally 都要执行 由于在Java中没有C 中的析构函数 所以程序员可以在finally语句中做资源的回收 如关闭打开的文件等 Try语句可以嵌套 异常的捕获举例P180 例8 2 3 声明异常 有些时候方法本身并不想 或者不需要 处理它所产生的异常 而是向上传递由调用它的方法来处理这些异常 这时就要用到throws子句 throws子句包含在方法的声明中 其格式为 返回类型方法名 参数表 throws异常名列表注 多个异常间用 隔开举例 P182 例8 3 4 抛出异常 在捕获一个异常之前 当然要有一段代码产生异常并生成异常对象将它抛出 抛出异常的代码可以是Java程序 或JDK中的某个类 也可以是Java运行时系统 它们都是通过throw语句来实现的 其格式为 throw异常对象 注 可抛出的异常对象必须为Throwable类或其子类 自己定义的异常类对象也可以用throw语句抛出 执行throw语句后 程序流程会在此立即停止 转去执行与其匹配的catch语句 举例 P183 例8 4 5 创建用户自己的异常 class自定义异常extends父异常类名 类体 举例 P184 例8 5 异常处理的原则 对非运行时异常必须捕获或声明 对于自定义的异常 要把它作为类Exception的子类 且类名应以Exception结尾 在捕获或声明异常时 应选取合适的异常类 Finally语句为异常处理提供了一个统一的出口 小结 异常处理的5个重要关键字 trycatchthrowsthrowfinally 指出下面程序的错误并改正 publicclassMyClass publicstaticvoidmain myMothod publicvoidmyMethod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论