内容介绍 6.1 任务预览 6.2 异常 6.3 异常种类与层次结构 6.4 异常处理代码块 try-catch-finally 6.5 throw 语句与 throws 子句 6.6 自定义异常类 6.7 异常处理代码块嵌套 6.8 错误与断言 6.9 本章小结 6.10 实训 6: 除法运算程序

Similar documents
chp6.ppt

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

Java程序设计

untitled

《计算概论》课程 第十九讲 C 程序设计语言应用

JavaIO.PDF

untitled


Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word - 封面

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

《大话设计模式》第一章

EJB-Programming-4-cn.doc

Chapter 9: Objects and Classes

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

untitled

untitled

Microsoft Word - 01.DOC

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Microsoft Word - 投影片ch13

Microsoft Word - 新1-12.doc

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

软件工程文档编制

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

使用MapReduce读取XML文件

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

Java

chap07.key

2009年9月全国计算机等级考试二级Java真题及答案

Chapter 9: Objects and Classes

拦截器(Interceptor)的学习

目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态 实 验 四 : 异 常 处 理 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

untitled

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

<4D F736F F F696E74202D20B5DA35D5C220D2ECB3A3BACDB6E0CFDFB3CC2E BBCE6C8DDC4A3CABD5D>

Swing-02.pdf

新版 明解C++入門編

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

山东建筑大学学分制管理规定(试行)

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

96年特種考試第一次司法人員考試試題解答

Java ¿ª·¢ 2.0: Óà Hadoop MapReduce ½øÐдóÊý¾Ý·ÖÎö

EJB-Programming-3.PDF

Microsoft Word - ch04三校.doc

一、

<4D F736F F D20B5DA3130D5C220B4A6C0EDD2ECB3A3BACDB4EDCEF32E646F63>

三种方法实现Hadoop(MapReduce)全局排序(1)

JBuilder Weblogic

java2d-4.PDF

PowerPoint 簡報

Guava学习之Resources

Microsoft Word - Broker.doc

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

FileMaker 15 ODBC 和 JDBC 指南

1.5招募说明书(草案)

建模与图形思考

javaexample-02.pdf

<4D F736F F D C3E6CFF2B6D4CFF35FB5DACEE5D5C D6D0B5C4D2ECB3A3B4A6C0ED5F2E646F63>

國立中山大學學位論文典藏.PDF

!!"#! " # $%%&#! ()*+ %& %,&,, &!!# # # #! "# ## # #! $# # #! %#! &# -,.$# /! 0(1 $%%& %&23%2!!!!!!!!!!!!!! %,% 4&%.&.22!!! &! 2%% 2,% %.32!,%%%,,! 56

電機工程系認可證照清單 /7/1

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

FileMaker 16 ODBC 和 JDBC 指南

Microsoft Word - 正文.doc

Microsoft PowerPoint - 09Future

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word doc

第3章.doc

3.1 num = 3 ch = 'C' 2

附录J:Eclipse教程

使用Cassandra和Spark 2.0实现Rest API服务

回 页 首 相 关 的 类 和 接 口 要 了 解 Java 动 态 代 理 的 机 制, 首 先 需 要 了 解 以 下 相 关 的 类 或 接 口 : java.lang.reflect.proxy: 这 是 Java 动 态 代 理 机 制 的 主 类, 它 提 供 了 一 组 静 态 方 法

<4D F736F F F696E74202D20B8DFBCB6D3C3BBA7BDE7C3E6D3EBB6E0CFDFB3CC2E707074>

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

untitled

Microsoft Word - JAVA Programming Language Homework VI_ans.doc

第3章 Java语言基础

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

BPS6.0 Web服务集成和短流程功能使用手册

untitled

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v

Hive:用Java代码通过JDBC连接Hiveserver

Learning Java

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

untitled

全国计算机技术与软件专业技术资格(水平)考试

Java第一天 年4月23日

Transcription:

第 6 章除法运算 异常处理 能力目标 : 学会使用 try-catch-finally 代码块处理异常 学会使用 throw 语句主动抛出异常, 使用 throws 子句从方法声明中抛出异常 理解自定义异常类, 了解断言语句 能运用异常处理机制编写整数 实数除法运算程序

内容介绍 6.1 任务预览 6.2 异常 6.3 异常种类与层次结构 6.4 异常处理代码块 try-catch-finally 6.5 throw 语句与 throws 子句 6.6 自定义异常类 6.7 异常处理代码块嵌套 6.8 错误与断言 6.9 本章小结 6.10 实训 6: 除法运算程序

本章实训程序运行结果 : 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[] args) { 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 IllegalArgumentException RuntimeException Exception InputMismatchException NoSuchElementException RuntimeException Exception 注意 : 系统预定义的异常类都以 Exception 结尾, 要求自定义异常类也以该单词结尾, 例如 MyException

6.4 异常处理代码块 try-catch-finally (1) 带参数的 try-catch 格式 : try { 可能发生异常代码 catch ( 异常类参数 ) { 异常处理代码 (2) 不同异常作不同处理的 try-catch catch. 格式 : 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 = xy; 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 { 最终代码 (4) 完整的异常处理块 try-catch catch-finally 格式 : try { 可能发生异常代码 catch ( 异常类 1 参数 1) { 异常处理代码 1 catch ( 异常类 2 参数 2) { 异常处理代码 2... catch ( 异常类 n 参数 n) { 异常处理代码 n finally { 最终代码

例 6-4 在例 6-3 的 main 方法后面, 增加 finally 子块, 其余代码不变 finally{ System.out.println(" 程序结束 ");

6.5 throw 语句与 throws 子句 throw 语句语法 : throw new 异常类构造方法名 ( 参数列表 ); 如 : throw new Exception(" 除数为零无意义 "); 使用 throws 子句在方法中抛出异常的格式如下 : 返回类型方法名 ( 可选参数表 ) throws 异常类名 { 自动或主动引发异常的方法体代码

例 6-5 编写 double 型实数除法运算程序, 测试实数相除 0 除数是否会引发异常 double x, y, z; x = 23.5; y = 0; z = xy; System.out.println(" 正实数除以零结果 :" + z); x = -52.6; z = xy; System.out.println(" 负实数除以零结果 :" + z); x = 0; y = 0; z = xy; System.out.println(" 零除以零结果 :" + z);

例 6-6 编写 double 型除法运算方法, 要求抛出 除数为零无意义 异常, 并且在除法运算方法中不捕获异常 static double divide(double x, double y) throws Exception{ if (y!=0){ return xy; 除法方法 else { throw new Exception(" 除数为零无意义 "); 抛出异常语句 public static void main(string[] args) { try{ double x, y, z; String str; BufferedReader read = while(true){ System.out.println(" 请输入被除数 ( 直接按回车结束程序 ):"); 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(" 相除结果 ( 保留两位小数 ):%.2f\n", z); catch(exception e){ System.out.println(" 异常 :" + e); finally{ System.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) throws Exception{ if (y!=0){ return xy; 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.equals("")) { break; x = Double.parseDouble(str); System.out.println(" 请输入除数 :"); str =read.readline(); y = Double.parseDouble(str); try{ 内层异常处理代码块 z = divide(x, y); System.out.printf(" 相除结果 ( 保留两位小数 ):%.2f\n", z); catch(mybyzeroexception e){ catch(exception e){ System.out.println(" 异常 :" + e); finally { System.out.println(" 程序结束 ");

6.8 错误与断言 Exception 和 Error 都是 Throwable 类的子类, 但错误往往比异常严重, 如 : 断言错误 AssertionError assert( 断言 ) 语句 : 武断地宣称的语句, 如宣称某条件必须成立 语法有二 : assert 条件表达式 assert 条件表达式 : 字符串型断言消息 遇到断言错误, 如果虚拟机处于启用断言状态, 则程序非正常终止 默认虚拟机总是关闭断言 断言语句适用程序调试排错 允许执行断言命令格式 : java -ea 主类名

例 6-9 编程, 输入数据计算平方根, 要求加入 负数不能计算平方根 断言语句 Scanner scan = new Scanner(System.in); System.out.println(" 请输入要计算平方根的数 :"); double x = scan.nextdouble(); assert x>0 : " 负数不能计算平方根 "; 断言语句 double sqroot = Math.sqrt(x); System.out.printf("%.2f 的平方根是 %.4f\n", x, sqroot);

6.9 本章小结 异常是运行过程中出现了意外, 无法按常规运行下去 使用 try-catch-finally 代码块捕获并处理异常 捕获 处理异常的代码块也可嵌套, 以满足复杂的需求 所有异常类构成树状的层次结构, 最顶层的异常类是 Exception 异常可使用 throw 语句主动精确地抛出 还可把在方法中出现的异常踢给调用它的方法来处理, 这时要在方法头部使用 throws 子句 除了异常外, 还有 Error( 错误 ) 错误比异常严重, 无法在程序中捕获和处理 例如断言错误 虚拟机本身的错误等 在断言语句中, 如果断言条件不成立, 就发生了断言错误, 这时只好任由程序自行中断运行 断言语句默认是不执行的, 一般只在程序调试阶段启用断言

6.10 实训 6: : 除法运算程序 (1) 编写整数除法程序, 运行时输入两个整数, 计算整除结果, 要求捕获除数为零等异常 (2) 编写 double 型的实数除法程序, 运行时输入两个实数, 计算相除结果, 要求捕获并处理异常 (3) 编程, 自定义一个异常类, 在 double 型除法运算方法中, 遇到除数为零, 就抛出自定义的异常对象

谢谢! 返回目录 结束放映