Microsoft Word - 投影片ch13

Similar documents
chp6.ppt

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

Microsoft Word - 投影片ch11

JavaIO.PDF

Microsoft Word - 投影片ch15

Microsoft Word - 投影片ch03

投影片 1

3.1 num = 3 ch = 'C' 2

Chapter 9: Objects and Classes

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

雲端 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


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

untitled

untitled

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

untitled

untitled

Chapter 9: Objects and Classes

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

《大话设计模式》第一章

EJB-Programming-4-cn.doc

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

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

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

机关团体 31 的步子迈得更实更好 报告 审议通过 中国共产党如皋市 落实到党的建设各个方面 以良好作风保障经济社会又好 十一届代表第四次会议决议 经济技术开发区 城北街 又快发展 省委督导组副组长汪以力到会指导 南通市委 道 如皋工业园区 如城街道 白蒲镇 搬经镇 市发改 督导组组长葛维先出席会议

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

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

Microsoft Word - 01.DOC

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

untitled

使用MapReduce读取XML文件

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

java2d-4.PDF

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

内容介绍 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: 除法运算程序

Java

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

Microsoft Word - 投影片ch22

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

大 綱 背 景 解 決 之 道 文 獻 探 討 建 置 貝 氏 網 路 研 究 結 果 結 論 2

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

The Embedded computing platform

untitled

FileMaker 15 ODBC 和 JDBC 指南

Microsoft Word - ch04三校.doc

untitled

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

新版 明解C++入門編

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

運算子多載 Operator Overloading

EJB-Programming-3.PDF

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

Microsoft Word - 投影片ch12

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

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

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

C 1

FY.DOC

FileMaker 16 ODBC 和 JDBC 指南

c_cpp

javaexample-02.pdf

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Swing-02.pdf

JBuilder Weblogic

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

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

, 即 使 是 在 昏 暗 的 灯 光 下, 她 仍 然 可 以 那 么 耀 眼 我 没 有 地 方 去, 你 会 带 着 我 么 杜 晗 像 是 在 嘲 笑 一 般, 嘴 角 的 一 抹 冷 笑 有 着 不 适 合 这 个 年 龄 的 冷 酷 和 无 情, 看 着 江 华 的 眼 神 毫 无 温

Microsoft Word - 投影片ch14

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

云 浮 市 总 工 会 学 习 贯 彻 市 委 五 届 九 次 全 会 精 神 全 省 工 会 第 二 季 度 暨 上 半 年 劳 资 纠 纷 研 判 会 召 开 河 源 市 总 工 会 召 开 劳 资 纠 纷 研 判 会 议 湛 江 市 总 工 会 召 开 上 半 年 劳 资 纠 纷 研 判 会

Microsoft Word - JAVA Programming Language Homework VI_ans.doc

untitled

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

一、

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

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

公務員服務法第13條相關解釋彙整表

大陸教育部等6個部門公佈「現代職業教育體系建設規劃 ( 年)」規劃到2015年初步形成現代職業教育體系框架,到2020年基本建成「中國」特色現代職業教育體系

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

浙江师范大学2014年度毕业生就业质量报告

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

B1

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

B1

Microsoft Word - 临政办发6.doc

1.5招募说明书(草案)

建模与图形思考

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

Learning Java

Java 程式設計初階 第 5 章:基本輸出入 & 流程控制

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

JAVA基礎程式設計班

01

View:Struts 提 供 了 action form 创 建 form bean, 用 于 在 controller 和 view 间 传 输 数 据 此 外,Struts 提 供 了 自 定 义 JSP 标 签 库, 辅 助 开 发 者 用 JSP 创 建 交 互 式 的 以 表 单 为 基

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

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

Microsoft PowerPoint - ch15.ppt

Transcription:

Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第十三章例外處理 本章學習目標了解什麼是例外處理認識例外類別的繼承架構認識例外處理的機制學習如何撰寫例外類別

例外處理 13-2 13.1 例外的基本觀念 在執行程式時, 經常發生一些不尋常的狀況 例如 : (1) 要開啟的檔案不存在 (2) 陣列的索引值超過了陣列容許的範圍 (3) 使用者輸入錯誤 Java 把這類不尋常的狀況稱為 例外 (exception)

例外處理 13-3 13.1.1 為何需要例外處理? 易於使用可自行定義例外類別允許我們拋出例外不會拖慢執行速度

例外處理 13-4 13.1.2 簡單的例外範例 app13_1 是個錯誤的程式 : 01 // app13_1, 索引值超出範圍 02 public class app13_1 03 { 04 public static void main(string args[]) 05 { 06 int arr[]=new int[5]; // 容許 5 個元素 07 arr[10]=7; // 索引值超出容許範圍 08 System.out.println("end of main() method!!"); 09 } 10 } app13_1 執行時, 會產生下列的錯誤訊息 : Exception in thread "main" java.lang.arrayindexoutofboundsexception at app13_1.main(app13_1.java:7)

例外處理 13-5 Java 的預設例外處理機制會依下面的程序做處理 : (1) 拋出例外 (2) 停止程式執行

例外處理 13-6 13.1.3 例外的處理 例外處理 : 加上捕捉例外的程式碼, 可針對不同的例外做妥善的處理 例外處理的語法如下 : try { // 要檢查的程式敘述 ; } catch( 例外類別變數名稱 ) { // 例外發生時的處理敘述 ; } finally { // 一定會執行的程式碼 ; } try 區塊 catch 區塊 finally 區塊 格式 13.1.1 例外處理的語法

例外處理 13-7 下圖繪出了例外捕捉的流程圖 : try{} 是否捕捉到例外? false true 與 catch() 裡的例外相同? false true 執行 catch 區塊裡裡的敘述的敘述 執行 finally 區塊裡的敘述 其它的敘述

例外處理 13-8 下面是例外處理的範例 : /* app13_2 OUTPUT----------- index out of bound!! this line is always executed!! end of main() method!! -----------------------------*/ 01 // app13_2, 例外的處理 02 public class app13_2 03 { 04 public static void main(string args[]) 05 { 06 try // 檢查這個程式區塊的程式碼 07 { 08 int arr[]=new int[5]; 09 arr[10]=7; 10 } 11 catch(arrayindexoutofboundsexception e) 12 { 13 System.out.println("index out of bound!!"); 14 } 15 finally // 這個區塊的程式碼一定會執行 16 { 如果拋例外, 便執行此區塊的程式碼 17 System.out.println("this line is always executed!!"); 18 } 19 System.out.println("end of main() method!!"); 20 } 21 }

例外處理 13-9 如果捕捉到例外,Java 會利用例外類別建立一個類別變數 e: 01 // app13_3, 例外訊息的擷取 02 public class app13_3 03 { 04 public static void main(string args[]) 05 { 06 try 07 { 08 int arr[]=new int[5]; 09 arr[10]=7; 10 } 11 catch(arrayindexoutofboundsexception e) 12 { 13 System.out.println("index out of bound!!"); 14 System.out.println("Exception="+e); // 顯示例外訊息 15 } 16 System.out.println("end of main() method!!"); 17 } 18 } /* app13_3 OUTPUT-------------------------- index out of bound!! Exception=java.lang.ArrayIndexOutOfBoundsException end of main() method!! -------------------------------------------*/

例外處理 13-10 13.1.4 例外處理機制的回顧 下圖繪出了例外處理機制的選擇流程 : 1 自行撰寫 try-catch-filally 區塊來處理例外, 如 app13_2, app13_3 例外處理機制 2 交由 Java 的預設例外處理機制來處理, 如 app13_1

例外處理 13-11 13.2 例外類別的繼承架構 例外類別可分為兩大類 :java.lang.exception 與 java.lang.error 下圖為 Throwable 類別的繼承關係圖 : Throwable Error Exception IOException RuntimeException............ ArithmeticException IndexOutOfBoundsException............ StringIndexOutOfBoundsException ArrayIndexOutOfBoundsException

例外處理 13-12 當例外發生時,catch() 程式區塊會接收由 Throwable 類別的子類別所產生的物件 : 只接收由 Throwable 類別的子類別所產生的物件 catch( ArrayIndexOutOfBoundsException e ) { System.out.println("index out of bound!!"); System.out.println("Exception="+e); // 顯示例外訊息 }

例外處理 13-13 使用 try 捕捉一種以上的例外 若要捕捉 ArithmeticException 和 ArrayIndexOutOfBoundsException 兩個例外, 可以用如下的語法來撰寫 : 01 try 02 { 03 // try 區塊的程式碼 04 } 05 catch(arrayindexoutofboundsexception e) 06 { 07 // 捕捉到 ArrayIndexOutOfBoundsException 例外所執行的程式碼 08 } 09 catch(arithmeticexception e) 10 { 11 // 捕捉到 ArithmeticException 例外所執行的程式碼 12 }

例外處理 13-14 捕捉所有的例外 不論例外類別為何, 都想捕捉它的話, 則可在 catch() 的括號內填上 Exception 例外 : 01 catch(exception e) 02 { 03 // 捕捉任何例外所執行的程式碼 04 }

例外處理 13-15 13.3 拋出例外拋出例外有下列兩種方式 : (1) 於程式中拋出例外 (2) 指定 method 拋出例外

例外處理 13-16 13.3.1 於程式中拋出例外 於程式中拋出例外時, 要用到 throw 這個關鍵字, 其語法如下 : throw 由例外類別所產生的物件 ; 格式 13.3.1 例外處理的語法

例外處理 13-17 app13_4 是於程式中拋出例外的範例 : 01 // app13_4, 於程式中拋出例外 02 public class app13_4 03 { 04 public static void main(string args[]) 05 { 06 int a=4,b=0; 07 08 try 09 { 10 if(b==0) 11 throw new ArithmeticException(); // 拋出例外 12 else 13 System.out.println(a+"/"+b+"="+a/b); // 若沒有拋出例外, 則執行此 行 14 } 15 catch(arithmeticexception e) 16 { 17 System.out.println(e+" throwed"); 18 } 19 } 20 } /* app13_4 OUTPUT------------------- java.lang.arithmeticexception throwed ------------------------------------*/

例外處理 13-18 app13_5 是讓系統自動拋出例外的驗證 : 01 // app13_5, 讓系統自動拋出例外 02 public class app13_5 03 { 04 public static void main(string args[]) 05 { 06 int a=4,b=0; 07 08 try 09 { 10 System.out.println(a+"/"+b+"="+a/b); 11 } 12 catch(arithmeticexception e) 13 { 14 System.out.println(e+" throwed "); 15 } 16 } 17 } /* app13_5 OUTPUT------------------------------------- java.lang.arithmeticexception throwed: / by zero throwed ---------------------------------------------------------*/

例外處理 13-19 13.3.2 指定 method 拋出例外 若是要由 method 拋出例外,method 必須以下面的語法來定義 : method 名稱 ( 引數...) throws 例外類別 1, 例外類別 2,... { // method 內的程式碼 } 格式 13.3.2 由 method 拋出例外

例外處理 13-20 app13_6 是指定由 method 來拋出例外的範例 01 // app13_6, 指定 method 拋出例外 02 public class app13_6 03 { 04 public static void aaa(int a,int b) throws ArithmeticException 05 { 06 int c; 07 c=a/b; 08 System.out.println(a+"/"+b+"="+c); 09 } 10 11 public static void main(string args[]) 12 { 13 try 14 { 15 aaa(4,0); 16 } 17 catch(arithmeticexception e) 18 { 19 System.out.println(e+" throwed"); 20 } 21 } 22 } /* app13_6 OUTPUT----------------------------- java.lang.arithmeticexception: / by zero throwed -----------------------------------------------*/

例外處理 13-21 app13_7 說明了如何從不同類別裡的 method 裡拋出例外 : 01 // app13_7, 從不同類別內的 method 拋出例外 02 class Ctest 03 { 04 public static void aaa(int a,int b) throws ArithmeticException 05 { 06 int c=a/b; 07 System.out.println(a+"/"+b+"="+c); 08 } 09 } 10 11 public class app13_7 12 { 13 public static void main(string args[]) 14 { 15 try 16 { 17 Ctest.aaa(4,0); 18 } 19 catch(arithmeticexception e) 20 { 21 System.out.println(e+" throwed"); 22 } 23 } 24 } /* app13_7 OUTPUT----------------------------- java.lang.arithmeticexception: / by zero throwed -----------------------------------------------*/

例外處理 13-22 13.4 自己撰寫例外類別 自行撰寫例外類別的語法如下 : class 例外類別名稱 extends Exception { // 定義類別裡的各種成員 } 格式 13.4.1 撰寫自訂例外類別的語法

例外處理 13-23 下面的範例說明了如何定義自己的例外類別, 以及使用它們 : 01 // app13_8, 定義自己的例外類別 02 class CCircleException extends Exception // 定義自己的例外類別 03 { 04 } 05 06 class CCircle // 定義類別 CCircle 07 { 由 method 拋出例外 08 private double radius; 09 public void setradius(double r) throws CCircleException 10 { 11 if(r<0) 12 { 13 throw new CCircleException(); // 拋出例外 14 } 15 else 16 radius=r; 17 } 18 public void show() 19 { 20 System.out.println("area="+3.14*radius*radius); 21 }

例外處理 13-24 22 } 23 24 public class app13_8 25 { 26 public static void main(string args[]) 27 { 28 CCircle cir=new CCircle(); 29 try 30 { 31 cir.setradius(-2.0); 32 } 33 catch(ccircleexception e) // 捕捉由 setradius() 拋出的例外 34 { 35 System.out.println(e+" throwed"); 36 } 37 cir.show(); 38 } 39 } /* app13_8 OUTPUT------- CCircleException throwed area=0.0 --------------------------*/

例外處理 13-25 13.5 回顧 IOException 例外類別 會拋出 IOException 例外的 method, 其例外處理的方式有兩種 第一種是直接由 main() 拋出例外,app3_13 所採用的就是這種機制 : 01 // app3_13, 由鍵盤輸入字串 02 import java.io.*; 03 public class app3_13 04 { 05 public static void main(string args[]) throws IOException 06 {..... 16 } 17 } 由 main() 拋出例外讓系統預設的例外處理機制來處理

例外處理 13-26 第二種方式是撰寫 try-catch 區塊來捕捉拋出的例外, 如下面的範例 : 01 // app13_9, 撰寫 try-catch 區塊來捕捉 IOException 例外 02 import java.io.*; // 載入 java.io 類別庫裡的所有類別 03 public class app13_9 04 { 05 public static void main(string args[]) 06 { 07 BufferedReader buf; 08 String str; 09 10 buf=new BufferedReader(new InputStreamReader(System.in)); 11 try 12 { 13 System.out.print("Input a string: "); 14 str=buf.readline(); 15 System.out.println("string= "+str); // 印出字串 16 } 17 catch(ioexception e){} 18 } 19 } /* app13_9 OUTPUT--------- Input a string: Hello Java! string= Hello Java! ---------------------------*/

例外處理 13-27