java语言程序设计基础(第2版)错误及异常处理ppt64_第1页
java语言程序设计基础(第2版)错误及异常处理ppt64_第2页
java语言程序设计基础(第2版)错误及异常处理ppt64_第3页
java语言程序设计基础(第2版)错误及异常处理ppt64_第4页
java语言程序设计基础(第2版)错误及异常处理ppt64_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第五讲 错误及异常处理Error Handling with Exceptions* 1学习要点 异常的基础知识 异常的处理 自定义的异常Date 2Java对异常的处理 在程序运行中出现的某种可预期的、阻止程序正常运行的情况称为异常Java中通过面向对象的方式来处理异常 如果某方法在执行过程中产生异常,则该方法将产生代表该异常的对象,并将其传递给运行时系统,这个过程称为抛出( throw)异常 运行时系统寻找出相应的代码来处理这一异常,这一过程称为捕获( catch)异常。Date 3在方法中处理异常的方式 捕获( catch)异常 一个方法可以在方法内部提供处理异常的代码来捕获( catch)异常 声明( Specify )异常 如果一个方法内部不对异常进行捕获时,必须对异常进行声明,表示当前的方法将产生某种异常。 此时方法抛出的异常将由调用它的方法来处理Date 4异常的分类Checked Exceptions(校验异常 ):在编译过程中被检测的异常。 校验异常必须被捕获或声明。Runtime Exceptions(运行时异常 ):在运行过程中被检测的异常。 运行时异常可以不进行捕获和声明。Date 5对异常进行捕获 对异常的捕获由三个部分组成try语句catch语句finally语句Date 6try语句try语句的语法为:try Java statements Java statements:指一段可能产生一个或多个例外的代码Date 7catch语句catch语句的语法为catch (SomeThrowableObject variableName) Java statements SomeThrowableObject :声明了异常处理的类型,它必须是 Throwable类的子类。variableName:运行时在 try代码块中抛出的异常对象。Java statements:指一段用来处理异常的代码。Date 8finally语句finally语句的语法finallyJava statementsfinally语句为 Java程序提供了统一的出口 在 try语句限定的代码中,如果某段代码抛出了异常,其后的代码将不再被执行。 无论 try所指定的代码是否抛出异常, finally所指定的代码都将被执行。Date 9捕获异常的注意事项catch语句和 finally语句必须和 try配对出现try语句之后必须存在 catch语句或者 finally语句或者两者同时存在。try语句不可以脱离 catch语句和 finally语句而独立存在。Date 10catch语句不可省略的情况 当 try语句包含的代码块中抛出了 checked Exception时, catch语句不可省略 此时 finally语句可以被省略Date 11捕获异常时的注意事项try语句和 catch语句必须成对出现finally语句可以被省略 捕获例外的完整语法为或者try . . . catch ( . . . ) . . . catch ( . . . ) . . . try . . . catch ( . . . ) . . . catch ( . . . ) . . . finally. . .Date 12可以省略 catch语句的情况 当 try语句中的代码没有抛出任何必须捕获的异常时, catch语句可以被省略。但是至少必须存在 catch语句和 finally语句中的一个语句。 这种方法是很有必要的: 代码中有可能抛出运行时异常。 当前的写法主要为运行时异常提供统一的出口。Date 13举例public class TestApublic static void methodA() trySystem.out.println(“abcd“);finally System.out.println(“123456“);public static void main(String args)methodA();Date 14示例说明 上例中用红色标出的部分没有抛出任何必须捕获的例外,此时省略了 catch语句。在编译和运行时都没有产生任何信息 上例的运行结果如下:abcd123456Date 15捕获异常举例import java.io.*;public class CatchExceptionpublic static void main(String args)tryFileInputStream in = new FileInputStream(“test.txt“);System.out.println(“in proc try”);catch(FileNotFoundException e)System.out.println(“in proc catch);finally System.out.println(“in proc finally“);Date 16运行结果 如果存在文件 test.txt时将输出:in proc tryin proc finally 如果文件 test.txt文件不存在时将输出:in proc catchin proc finallyDate 17示例说明 类 FileInputStream在指定文件不存在时将抛出 FileNotFoundException,此时将不执行System.out.println(“in proc try”)语句 无论是否抛出例外, finally语句所包含的代码块: System.out.println(“in proc finally”)都将被执行Date 18finally语句的执行举例( 1)tryFile f = new File(“test.txt”);FileInputStream in = new FileInputStream(f);System.out.println(“in proc try”);catch(FileNotFoundException e)return ;finallySystem.out.println(“in proc finally”);Date 19示例说明 上例中如果抛出例外,则在 catch语句中将执行 return语句表示调用结束,但是此时的结果为:in proc finallyreturn语句被执行前, Java运行时环境先执行finally语句。Date 20finally语句的执行举例( 2)tryFile f = new File(“test.txt”);FileInputStream in = new FileInputStream(f);System.out.println(“in proc try”);return ;catch(FileNotFoundException e)System.out.println(“in proc catch”);finallySystem.out.println(“in proc finally”);Date 21示例说明 上例如果没有抛出 FileNotFoundException时,将执行打印语句,和 return语句,此时的运行结果为:in proc tryin proc finally 在 return语句执行前, Java运行时环境先执行了 finally语句Date 22finally语句小结finally语句 “总是 ”被执行 不执行 finally语句的唯一情况是 Java虚拟机关闭(如使用 System.exit()或者是机器关闭)。Date 23捕获异常的规则 在捕获异常时 ,catch语句可能存在多个,此时 Java运行时系统将按照 catch语句的顺序依次进行匹配直到找到匹配的 catch语句为止。 匹配的 catch语句表示catch语句中处理的例外类型和生成的例外对象类型完全一致catch语句中处理的例外类型为生成的例外对象类型的父类Date 24举例tryFile f = new File(“test.txt”);FileInputStream in = new FileInputStream(f);int r = in.read();in.close();catch(IOException e)catch(FileNotFoundException e)Date 25示例说明 在创建 FileInputStream时, Java运行时系统将抛出FileNotFoundException 在执行 FileInputStream中的 read()方法时, Java运行时系统将抛出 IOException FileNotFoundException为 IOException的子类 系统如果抛出 FileNotFoundException时, Java运行时系统首先和第一个 catch语句相匹配,IOException能够与 FileNotFoundException匹配,Java运行时系统将不再和之后的 catch语句进行匹配 此时第二个 catch语句将不再执行。Date 26捕获异常的规则( 2) 在使用 catch语句时,仅仅能够捕获 try语句中的代码抛出的异常类型本身或者异常类型的父类 如果 catch语句中捕获了 try语句中的代码不可能抛出的例外时,代码将不能编译通过 如果 catch语句中使用如下方式:catch(Exception e)在任何情况下编译都能够通过Date 27举例public class CatchTeststatic public void methodA() trySystem.out.println(“abcd“);catch(FileNotFoundException e)public static void main(String args)methodA();Date 28示例说明 上例编译不能通过 编译的错误信息如下:CatchTest.java:10: exception java.io.FileNotFoundException is never thrown in body of corr

温馨提示

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

评论

0/150

提交评论