收藏 分享(赏)

JAVA程序员培训定制课程c08.ppt

上传人:ysd1539 文档编号:6592194 上传时间:2019-04-18 格式:PPT 页数:31 大小:151.50KB
下载 相关 举报
JAVA程序员培训定制课程c08.ppt_第1页
第1页 / 共31页
JAVA程序员培训定制课程c08.ppt_第2页
第2页 / 共31页
JAVA程序员培训定制课程c08.ppt_第3页
第3页 / 共31页
JAVA程序员培训定制课程c08.ppt_第4页
第4页 / 共31页
JAVA程序员培训定制课程c08.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、第八章,Java异常和断言,2,本课内容,Java异常的概念和处理机制 Java异常的分类 异常的捕获、处理和抛出 使用用户自定义异常 断言,3,Java异常,Java程序运行过程中所发生的异常事件可分为两类: 错误(Error):JVM系统内部错误、资源耗尽等严重情况 违例(Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,例如: 对负数开平方根 空指针访问 试图读取不存在的文件 网络连接中断,4,Java异常举例(1),public class Test12_1public static void main(String args) String friends=“l

2、isa“,“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_1lisa bily kessy Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsExceptionat Test12_1.main(Test12_1.java:5) Press any key to continue.,6,Jav

3、a异常类层次,7,常见异常,RuntimeException 错误的类型转换 数组下标越界 空指针访问 IOExeption 从一个不存在的文件中读取数据 越过文件结尾继续读取 连接一个不存在的URL,8,异常处理机制,Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。 程序员通常只

4、能处理违例(Exception),而对错误(Error)无能为力,9,异常处理举例(1),public class Test12_2public 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

5、 is the end“); ,10,异常处理举例(2),程序Test12_2运行结果:java Test12_2lisa bily kessy index errthis is the end Press any key to continue.,11,捕获异常(1),捕获异常是通过try-catch-finally语句实现的。try/可能产生异常的代码 catch( ExceptionName1 e )/当产生ExceptionName1型异常时的处置措施 catch( ExceptionName2 e )/当产生ExceptionName2型异常时的处置措施 finally/无条件执行的

6、语句 ,12,捕获异常(2),try 捕获异常的第一步是用try语句块选定捕获异常的范围。 catch 在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。 getMessage( ) 方法,用来得到有关异常事件的信息 printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。,13,捕获异常(3),finally 捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的

7、状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。 finally语句是任选的,14,捕获异常(4),try startFaucet();waterLawn();catch (BrokenPipeException e)logProblem();finally stopFaucet();,15,IOException异常处理举例(1),import java.io.*; public class Test12_3public static void main(String args) FileInputStream in=new FileInputS

8、tream(“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.javaE:exTest12_3.java:4: 未报告的异常 java.io.FileNotFoundException ;必须被捕获或被声明抛出FileInputStream in=new FileInputStream(“myfile.txt“); E:exTes

9、t12_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_4public stati

10、c void main(String args)tryFileInputStream 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,体会j

11、ava语言中异常的捕捉和处理机制。 相关知识:FileInputStream类的成员方法read()的功能是每次从相应的(本地为ASCII码编码格式)文件中读取一个字节,并转换成0255之间的int型整数返回,到达文件末尾时则返回-1。,19,声明抛弃异常,声明抛弃异常是Java中处理异常的第二种方式 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应声明抛弃异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理 声明抛弃举例:public void readFile(String file) throws IOException / 读文件

12、的操作可能产生IOException类型的异常FileInputStream fis = new FileInputStream(file);,20,声明抛弃异常举例,import java.io.*; public class Test12_5public static void main(String args)Test12_5 t = new Test12_5();tryt.readFile();catch(IOException e)System.out.println(e); public void readFile()throws IOException FileInputStre

13、am 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 FileNotFoundExcept

14、ion 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,

15、创建用户自定义异常类,用户自定义异常类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_6public void regist(int num) throws MyException

16、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,断言,语法:as

17、sert 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

18、(size=0) throw new RuntimeException(“Attempt to pop from empty stack”);/ do the work of popassert (this.getElementCount()=size-1);return value; ,30,编译和运行时断言的开启,编译时:javac source 1.4 myTest.java 运行时:java ea myTest,31,Ex2 抛异常声明,编写应用程序,练习P19页类的定义,体会其中的方法重写时对声明抛出异常方面的限制原则;编写应用程序,改造并测试P22、23页创建和使用用户自定义异常的例子,加深理解;(也可以只分析、体会编程思路。),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报