版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、6.1 任务预览 本章实训程序运行结果: 6.2 异常 异常,即意外,英文是Exception。 异常通常是程序运行时出现的问题或错误。 【例6-1】编写没有异常处理的除数为0程序。public class Example1 public static void main(String args) int x, y, z;x = 2;y = 0;z = x / y;System.out.println(整数除以0,得: + z);【例6-2】改进例6-1,编写带异常处理的除数为0程序。public class Example2 public static void main(String ar
2、gs) try int x, y, z; x = 2; y = 0; z = x / y; System.out.println(整数除以0,得: + z); catch (Exception e) System.out.println(发生了异常: + e.getMessage(); 6.3 异常种类与层次结构 异常的种类很多,最顶层的异常类是Exception。 ArithmeticException RuntimeException Exception FileNotFoundException IOException Exception NumberFormatException Il
3、legalArgumentException RuntimeException Exception InputMismatchException NoSuchElementException RuntimeException Exception 注意:系统预定义的异常类都以Exception结尾,要求自定义异常类也以该单词结尾,例如MyException。6.4 异常处理代码块异常处理代码块try-catch-finally (1)带参数的try-catch 格式:try 可能发生异常代码 catch (异常类 参数) 异常处理代码 (2)不同异常作不同处理的try-catchcatch. 格
4、式:try 可能发生异常代码 catch (异常类1 参数1) 异常处理代码1 catch (异常类2 参数2) 异常处理代码2 .catch (异常类n 参数n) 异常处理代码n 【例6-3】编写整数除法运算程序,尝试对不同类型异常作不同处理。 import java.util.*;try Scanner scan = new Scanner(System.in); int x, y, z; System.out.println(请输入被除数:); x = scan.nextInt(); System.out.println(请输入除数:); y = scan.nextInt(); z =
5、x/y; System.out.println(整除结果: + z);catch(InputMismatchException e) System.out.println(输入不匹配异常: + e.getMessage();catch(ArithmeticException e) System.out.println(算术异常: + e.getMessage();catch(Exception e) System.out.println(异常: + e.getMessage(); 异常处理代码块 (3)不处理异常的try-finally 格式:try 可能发生异常代码 finally 最终代码
6、 (4)完整的异常处理块try-catchcatch-finally 格式:try 可能发生异常代码 catch (异常类1 参数1) 异常处理代码1 catch (异常类2 参数2) 异常处理代码2 .catch (异常类n 参数n) 异常处理代码n finally 最终代码 【例6-4】在例6-3的main方法后面,增加finally子块,其余代码不变。 finallySystem.out.println(程序结束。); 6.5 throw语句与throws子句 throw语句语法:throw new 异常类构造方法名(参数列表); 如:throw new Exception(除数为零无意
7、义); 使用throws子句在方法中抛出异常的格式如下: 返回类型 方法名(可选参数表) throws 异常类名 自动或主动引发异常的方法体代码【例6-5】编写double型实数除法运算程序,测试实数相除0除数是否会引发异常。 double x, y, z;x = 23.5;y = 0;z = x/y;System.out.println(正实数除以零结果: + z);x = -52.6;z = x/y;System.out.println(负实数除以零结果: + z);x = 0;y = 0; z = x/y;System.out.println(零除以零结果: + z);【例6-6】编写d
8、ouble型除法运算方法,要求抛出“除数为零无意义”异常,并且在除法运算方法中不捕获异常。static double divide(double x, double y) throws Exception if (y!=0) return x/y; /除法方法 else throw new Exception(除数为零无意义); /抛出异常语句 public static void main(String args) try double x, y, z; String str; BufferedReader read = while(true) System.out.println(请输入被
9、除数(直接按回车结束程序):); str = read.readLine(); if (str.equals() break; x = Double.parseDouble(str); System.out.println(请输入除数:); str = read.readLine(); y = Double.parseDouble(str); z = divide(x, y); /调用除法方法 System.out.printf(相除结果(保留两位小数):%.2fn, z); catch(Exception e) System.out.println(异常: + e); finally Sys
10、tem.out.println(程序结束。); 6.6 自定义异常类 要继承预定义异常类,如ArithmeticException、Exception等。 【例6-7】自定义一个异常类,在double型除法运算方法中,遇到除数为零,便抛出自定义异常对象。class MyByZeroException extends ArithmeticException public MyByZeroException(String message)super(message); public class Example7 /主类static double divide(double x, double y)
11、 throws Exception if (y!=0) return x/y; else throw new MyByZeroException(除数为零无意义); /抛出自定义异常 6.7 异常处理代码块嵌套 【例6-8】改进例6-7,编写嵌套的异常处理代码块,使之发生除数异常时不终止程序运行。 try /外层异常处理代码块 double x, y, z; String str; BufferedReader read = while(true) System.out.println(请输入被除数(直接按回车结束程序):); str = read.readLine(); if (str.eq
12、uals() break; x = Double.parseDouble(str); System.out.println(请输入除数:); str =read.readLine(); y = Double.parseDouble(str); try /内层异常处理代码块 z = divide(x, y); System.out.printf(相除结果(保留两位小数):%.2fn, z); catch(MyByZeroException e) catch(Exception e) System.out.println(异常: + e); finally System.out.println(程
13、序结束。); 6.8 错误与断言 Exception和Error都是Throwable类的子类, 但错误往往比异常严重,如:断言错误AssertionError。 assert(断言)语句:武断地宣称的语句,如宣称某条件必须成立。 语法有二:assert 条件表达式assert 条件表达式 : 字符串型断言消息 遇到断言错误,如果虚拟机处于启用断言状态,则程序非正常终止。 默认虚拟机总是关闭断言。 断言语句适用程序调试排错。 允许执行断言命令格式:java -ea 主类名【例6-9】编程,输入数据计算平方根,要求加入“负数不能计算平方根”断言语句。 Scanner scan = new Sca
14、nner(System.in);System.out.println(请输入要计算平方根的数:);double x = scan.nextDouble();assert x0 : 负数不能计算平方根; /断言语句double sqroot = Math.sqrt(x);System.out.printf(%.2f的平方根是%.4fn, x, sqroot); 6.9 本章小结 异常是运行过程中出现了意外,无法按常规运行下去。使用try-catch-finally代码块捕获并处理异常。 捕获、处理异常的代码块也可嵌套,以满足复杂的需求。 所有异常类构成树状的层次结构,最顶层的异常类是Exception。 异常可使用throw语句主动精确地抛出。还可把在方法中出现的异常踢给调用它的方法来处理,这时要在方法头部使用throws子句。 除了异常外,还有Error(错误)。错误比异常严重,无法在程序中捕获和处理。例如断言错误、虚拟机本身的错误等。 在断言语句中,如果断言条件不成立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度初中校园纪律与安全规范合作合同版B版
- 2024专业眼镜店员工作权益保障协议范本版B版
- 2024年委托代理协议正式文件一
- 2024年度一年期劳动协议样本
- 2024年个人承租汽车训练场地协议一
- 2024工程消防楼梯合同协议书范本
- 2024委托估价合同范本
- 2024工程承包合同终止协议
- 2024年临时招聘协议范本版B版
- 2024年度丙公司与丁公司城市生活垃圾处理与清运服务合同3篇
- GB/T 44676-2024电动自行车售后服务规范
- 学校2021年《学宪法讲宪法》第八个国家宪法日
- 人教版2024-2025学年一年级数学上册第三次月考质量检测(4-5单元)(含答案)
- 2024-2030年中国管道压力管行业现状规模与投资前景预测报告
- 2024年甘肃省公务员考试《行测》真题及答案解析
- 工程建设领域农民工…管理三方协议(参考文本)
- 颞下颌关节疾病的诊断及治疗(口腔颌面外科学课件)
- GB/T 44690-2024人造板及其制品挥发性有机化合物释放量分级
- 专题04故障电路2023年中考一模分类汇编(上海)
- 【大单元教学】湘教版地理八上第四章《中国的主要产业》第三节 单元整体核心素养教学设计
- 2024年江苏省中考英语试卷十一套合卷附答案
评论
0/150
提交评论