1、第7章 异常与断言 第7章 异常与断言异常01断言02专题应用:账户存款管理03本章提纲本章提纲第1节 异常编程中应该关注出错处理 编制正确和健壮的程序=实现功能+出错处理l 出错处理:表示错误、错误检查和错误处理。Java语言的异常机制特点l使用异常对象来表示错误l按照异常类型进行错误检查l捕获并处理异常第1节 异常F异常异常是一种在程序执行过程中产生的打断正常指令流的事件。面向对象的Java语言,使用异常类表示异常。F异常处理:抛出和捕获异常。异常处理:抛出和捕获异常。抛出是指异常事件发生时,把异常对象递交给Java运行时环境。捕获是指异常处理代码主动声明它所关注的异常类的语法,以及在运行
2、时环境的调度下,异常处理代码实际接收到被抛出的异常对象并进行异常处理的过程。Java异常机制第1节 异常try 要执行的语句代码/try块 catch(异常类型 异常变量名)针对捕获到的异常对象需进行的处理/catch块 catch /要捕获和处理的其它异常try-catch语句Ftry块正常功能,catch块异常处理Fcatch子句声明捕获类型F可以包括多个catch子句第1节 异常try-catch语句 程序程序7-17-1:读取指定文件的内容并显示在屏幕读取指定文件的内容并显示在屏幕上。上。F设计了设计了FilePrinterFilePrinter主类主类输出指定文件内容到控制台输出指定
3、文件内容到控制台F读取文件可能读取文件可能抛出抛出FileNotFoundExceptionFileNotFoundException或或IOExceptionIOException异常:异常:使用使用try-catchtry-catch语句语句第1节 异常所有异常类型都应该直接或间接地继承所有异常类型都应该直接或间接地继承java.lang.java.lang.ThrowableThrowable类。类。ExceptionIOExceptionFileNotFoundExceptionThrowable异常类的继承第1节 异常ThrowableThrowable(String message
4、(String message)构造异常构造异常对象,并保存异常描述信息对象,并保存异常描述信息。String String getMessagegetMessage()()返回返回异常事件的描述信息,有助于明确出现异常的原因异常事件的描述信息,有助于明确出现异常的原因。void void printStackTraceprintStackTrace()()打印打印调用栈输出,有助于确定异常出现的位置。调用栈输出,有助于确定异常出现的位置。Throwable类的几个重要方法第1节 异常Throwable对象的抛出throw 异常对象;throw new FileNotFoundExceptio
5、n();例如第1节 异常自定义异常class MyException extends Exception .异常类定义示例throw new MyException();抛出异常示例第1节 异常多catch子句的顺序捕获匹配规则是一种捕获匹配规则是一种is-ais-a关系的关系的匹配。匹配。try catch(IOException e)System.err.println(文件文件I/O出现错误出现错误:+e.getMessage();catch(FileNotFoundException e)System.err.println(文件路径无效文件路径无效:+e.getMessage();代
6、码不可达代码不可达因此要求:子类异常在前,父类异常在后第1节 异常JavaJava将异常分为三大将异常分为三大类。类。Exception异常 运行时异常ThrowableError Exception 受检查异常RuntimeException 错误第1节 异常程序有没有处理受检查异常将会接受语法检查。程序有没有处理受检查异常将会接受语法检查。方法可能抛出受检查异常时,需要用方法可能抛出受检查异常时,需要用throwsthrows声明。声明。关于受检查异常抛出异常示例(来自抛出异常示例(来自JDK的源代码)的源代码)public FileReader(String fileName)throw
7、s FileNotFoundException public String readLine()throws IOException public static void print(String path)throws FileNotFoundException,IOException 第1节 异常try-catch-finally和try-with-resource结构try 要执行的语句代码 catch(异常类)捕获处理异常 finally 清理性工作try(资源列表)要执行的语句代码 catch(异常类)捕获处理异常 finally 清理性工作 在异常发生时也确保关闭文件等清理性工作被
8、执行。在异常发生时也确保关闭文件等清理性工作被执行。第1节 异常try .catch(FileNotFoundException e)System.err.println(文件路径无效文件路径无效:+e.getMessage();catch(IOException e)System.err.println(文件文件I/O出现错误出现错误:+e.getMessage();finally if(br!=null)try br.close();catch(IOException e)System.err.println(关闭文件出错。关闭文件出错。);Finally块保证在最后执行,块保证在最后执行
9、,无论无论try块正常结束块正常结束还是因异常提前退出还是因异常提前退出try-catch-finally结构示例第1节 异常public static void print(String path)String line=null;try(BufferedReader br=new BufferedReader(new FileReader(path)while(line=br.readLine()!=null)System.out.println(line);catch(FileNotFoundException e)System.err.println(文件路径无效文件路径无效:+e.g
10、etMessage();catch(IOException e)System.err.println(文件文件I/O出现错误出现错误:+e.getMessage();try-with-resource结构示例无须在无须在finally块中关闭块中关闭br,因为资源会自动关闭。因为资源会自动关闭。第5节 Java程序的结构和规范1.以下选项中能够填入“throw new _()”的是()。IntegerDoubleFileNotFoundExceptionString ABCD提交单选题1分7.2 断言断言的基本语法 断言(Assertion)是对假设的“正常”情况的表达和检查。assert E
11、xpression1;或者assert Expression1:Expression2;在Expression1值为false时,抛出AssertionError。Expression2的值为可以作为AssertionError异常的消息。注意启用-ea选项,否则assert语句不执行。7.2 断言断言的基本语法 程序程序7-27-2:根据成绩计算评定等级。根据成绩计算评定等级。F设计了设计了CalculatorCalculator主类主类将百分制成绩转换为优秀、及格和不及格的成绩评定。将百分制成绩转换为优秀、及格和不及格的成绩评定。F对对grade()grade()方法的参数做检查,参数必须
12、是方法的参数做检查,参数必须是0 0到到100100间的成绩间的成绩使用使用assertassert语句语句7.2 断言断言在单元测试中的应用 程序程序7-37-3:测试成绩评定模块的测试成绩评定模块的JUnitJUnit单元测试单元测试用例。用例。F设计了设计了MyUnitTestMyUnitTest测试类测试类将百分制成绩转换为优秀、及格和不及格的成绩评定。将百分制成绩转换为优秀、及格和不及格的成绩评定。FtestGradetestGrade()()方法中实现边界测试方法中实现边界测试assertEqualsassertEquals方法断言检查百分制成绩是否评定正确。方法断言检查百分制成绩
13、是否评定正确。第5节 Java程序的结构和规范2.下列关于断言的说法不正确的是()。断言使用assert语句检查表达式值的真假,如果表达式值为假,则抛出异常。断言常用于检查方法的前置条件是否满足。断言常用于检查方法的后置条件是否满足(例如返回值是否符合期望值)。因为不涉及选择结构,所以断言语句一定会被执行。ABCD提交单选题1分第3节 专题应用模拟账户存款功能。程序程序7-47-4:模拟账户存款功能。要求支持为指定账户完成存款,根据存款额调整账模拟账户存款功能。要求支持为指定账户完成存款,根据存款额调整账户余额;当账户不存在时抛出自定义账户不存在异常户余额;当账户不存在时抛出自定义账户不存在异
14、常AccountNotFoundExceptionAccountNotFoundException;当调用存款方法指定了非法参数时抛出;当调用存款方法指定了非法参数时抛出IllegalArgumentExceptionIllegalArgumentException。p 正常功能的实现(定义Account和AccountManager等类)p 抛出异常(标准异常和自定义异常,运行时异常和受检查异常)p 捕获处理异常实验与作业F上机实验上机实验完成完成实验实验1212的的内容内容 F课后作业课后作业完成习题与实践教材中完成习题与实践教材中第第7 7章章中的全部习题中的全部习题 感谢您的关注Thank You for Your Attention