《Java异常和断言》PPT课件.ppt_第1页
《Java异常和断言》PPT课件.ppt_第2页
《Java异常和断言》PPT课件.ppt_第3页
《Java异常和断言》PPT课件.ppt_第4页
《Java异常和断言》PPT课件.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第八章,Java异常和断言,2,本课内容,Java异常的概念和处理机制 Java异常的分类 异常的捕获、处理和抛出 使用用户自定义异常 断言,3,Java异常,Java程序运行过程中所发生的异常事件可分为两类: 错误(Error):JVM系统内部错误、资源耗尽等严重情况 违例(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,例如: 对负数开平方根 空指针访问 试图读取不存在的文件 网络连接中断,4,Java异常举例(1),public class Test12_1 public static void main(String args) String friends=“lisa“,“bily“,“kessy“; for(int i=0;i5;i+) System.out.println(friendsi); System.out.println(“nthis is the end“); ,5,Java异常举例(2),程序Test12_1运行结果:java Test12_1 lisa bily kessy Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException at Test12_1.main(Test12_1.java:5) Press any key to continue.,6,Java异常类层次,7,常见异常,RuntimeException 错误的类型转换 数组下标越界 空指针访问 IOExeption 从一个不存在的文件中读取数据 越过文件结尾继续读取 连接一个不存在的URL,8,异常处理机制,Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。 程序员通常只能处理违例(Exception),而对错误(Error)无能为力,9,异常处理举例(1),public class Test12_2 public static void main(String args) String friends=“lisa“,“bily“,“kessy“; try for(int i=0;i5;i+) System.out.println(friendsi); catch(java.lang.ArrayIndexOutOfBoundsException e) System.out.println(“index err“); System.out.println(“nthis is the end“); ,10,异常处理举例(2),程序Test12_2运行结果:java Test12_2 lisa bily kessy index err this is the end Press any key to continue.,11,捕获异常(1),捕获异常是通过try-catch-finally语句实现的。 try /可能产生异常的代码 catch( ExceptionName1 e ) /当产生ExceptionName1型异常时的处置措施 catch( ExceptionName2 e ) /当产生ExceptionName2型异常时的处置措施 finally /无条件执行的语句 ,12,捕获异常(2),try 捕获异常的第一步是用try语句块选定捕获异常的范围。 catch 在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。 getMessage( ) 方法,用来得到有关异常事件的信息 printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。,13,捕获异常(3),finally 捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。 finally语句是任选的,14,捕获异常(4),try startFaucet(); waterLawn(); catch (BrokenPipeException e) logProblem(); finally stopFaucet(); ,15,IOException异常处理举例(1),import java.io.*; public class Test12_3 public static void main(String args) FileInputStream in=new FileInputStream(“myfile.txt“); int b; b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read(); in.close(); ,16,IOException异常处理举例(2),程序Test12_3编译结果: E:exjavac Test12_3.java E:exTest12_3.java:4: 未报告的异常 java.io.FileNotFoundException ;必须被捕获或被声明抛出 FileInputStream in=new FileInputStream(“myfile.txt“); E:exTest12_3.java:6: 未报告的异常 java.io.IOException ;必须被捕获或被声明抛出 b = in.read(); E:exTest12_3.java:9: 未报告的异常 java.io.IOException ;必须被捕获或被声明抛出 b = in.read(); E:exTest12_3.java:11: 未报告的异常 java.io.IOException ;必须被捕获或被声明抛出 in.close(); 4 个错误,17,IOException异常处理举例(3),import java.io.*; public class Test12_4 public static void main(String args) try FileInputStream in=new FileInputStream(“myfile.txt“); int b; b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read(); in.close(); catch (IOException e) System.out.println(e); finally System.out.println(“ Its ok!“); ,18,EX1 捕获和处理异常,编译、运行应用程序Test12_3.java/Test12_4,体会java语言中异常的捕捉和处理机制。 相关知识:FileInputStream类的成员方法read()的功能是每次从相应的(本地为ASCII码编码格式)文件中读取一个字节,并转换成0255之间的int型整数返回,到达文件末尾时则返回-1。,19,声明抛弃异常,声明抛弃异常是Java中处理异常的第二种方式 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应声明抛弃异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理 声明抛弃举例: public void readFile(String file) throws IOException / 读文件的操作可能产生IOException类型的异常 FileInputStream fis = new FileInputStream(file); ,20,声明抛弃异常举例,import java.io.*; public class Test12_5 public static void main(String args) Test12_5 t = new Test12_5(); try t.readFile(); catch(IOException e)System.out.println(e); public void readFile()throws IOException FileInputStream in=new FileInputStream(“myfile.txt“); int b; b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read(); in.close(); ,21,重写方法声明抛弃异常原则,重写方法不能抛出比被重写方法范围更大的异常类型,public class A public void methodA() throws IOException public class B1 extends TestA public void methodA() throws FileNotFoundException public class B2 extends TestA public void methodA() throws Exception ,22,人工抛出异常,Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出 首先要生成异常对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。 IOException e =new IOException(); throw e; 可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误: throw new String(“want to throw“);,23,创建用户自定义异常类,用户自定义异常类MyException,用于描述数据取值范围错误信息: class MyException extends Exception private int idnumber; public MyException(String message, int id) super(message); this.idnumber = id; public int getId() return idnumber; ,24,使用用户自定义异常类,public class Test12_6 public void regist(int num) throws MyException if (num 0) throw new MyException(“人数为负值,不合理“,3); System.out.println(“登记人数“ + num); public void manager() try regist(100); catch (MyException e) System.out.print(“登记失败,出错种类“+e.getId(); System.out.print(“本次登记操作结束“); public static void main(String args) Test12_6 t = new Test12_6(); t.manager(); ,25,断言,语法: assert assert :,26,断言推荐的使用方法,断言的文档和验证以及方法中的内部逻辑 内在不变式 控制流程不变式 后置条件和类不变式,27,断言推荐的使用方法示例(1),内在不变式: if (x0) else assert (x = 0); ,28,断言推荐的使用方法示例(2),控制流程不变式: switch (suit) case Suit.CLUBS: break; case . break; default: assert false; break; ,29,断言推荐的使用方法示例(3),public Object pop() int size = this.getElementCount(); if (size=0) throw new RuntimeException(“Attempt to pop from

温馨提示

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

评论

0/150

提交评论