第十五章 例外處理

32
Java SE 6 程程程程程程程程 程程程程 程程程程 程程程程 程程程程 程程

Upload: leilani-briggs

Post on 01-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

第十五章 例外處理. 迴圈. 15.1 關於程式錯誤. 範例:應用程式的例外. 9 個元素值的陣列. intElement=intArray[9] ;. 9 超出陣列索引範圍. Exception in thread "main" java.lang. ArrayIndexOutOfBoundsException: 9 at GException.main(GException.java:11). 15.1 關於程式錯誤. 程式錯誤種類. 編譯時期的錯誤 執行時期的錯誤. 邏輯錯誤 特定的應用程式例外 系統錯誤. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

第十五章 例外處理

迴圈

Page 2: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:應用程式的例外15.1 關於程式錯誤

9 個元素值的陣列

intElement=intArray[9] ;

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9at GException.main(GException.java:11)

9 超出陣列索引範圍

Page 3: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

程式錯誤種類

編譯時期的錯誤

執行時期的錯誤

• 邏輯錯誤

• 特定的應用程式例外

• 系統錯誤

15.1 關於程式錯誤

Page 4: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:傳統的應用程式的例外處理9 個元素,最大索引值等於8索引值大於 8則離開迴圈,避免錯誤

4 個元素,最大索引值等於3索引值大於 3則離開迴圈

15.2 try-catch 敘述與 Java 例外處理機制

Page 5: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

傳統程式錯誤處理的問題

• 缺乏一致性,難以維護。

• 每一個錯誤必須有其專屬的處理版本。

• 難以處理隱藏性的錯誤。

15.2 try-catch 敘述與 Java 例外處理機制

Page 6: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

try-catch 語法

try{

// 可能發生錯誤的程式區塊 …

}catch(Exception e){ // 例外類別

// 處理錯誤的程式碼區塊

}

監控區塊

錯誤處理區塊

15.2 try-catch 敘述與 Java 例外處理機制

Page 7: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

try-catch 程式執行流程15.2 try-catch 敘述與 Java 例外處理機制

Page 8: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: try-catch 示範

6 個元素最大索引值等於 5

指定索引值6 發生錯誤

跳至 catch區塊135

程式錯誤訊息:java.lang.ArrayIndexOutOfBoundsException: 6

15.2 try-catch 敘述與 Java 例外處理機制

Page 9: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

try-catch 好處

• 讓所有的錯誤處理程式能夠有一致的處理方式。

• 不需預先針對各種錯誤撰寫特定的錯誤處理邏輯。

• 監控程式同時會針對各種未知或是隱藏的錯誤,自動處理。

15.2 try-catch 敘述與 Java 例外處理機制

Page 10: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

finally 語法

try{// 可能發生錯誤的程式區塊 …

}catch(Exception e){ // 例外類別// 處理錯誤的程式碼區塊

}finally{// 例外處理終止

}

try-catch 終止程序

15.2 try-catch 敘述與 Java 例外處理機制

Page 11: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

finally 程式流程7.3 二維陣列

Page 12: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: finally 示範

1取得元素例外監控結束應用程式結束

15.2 try-catch 敘述與 Java 例外處理機制

Page 13: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: finally 示範(進入 catch )String[] strArray = {"x","2","3","4","5","6"};

索引值 0 的第一個元素是「 x 」,轉換成為 Integer 發生錯誤

程式錯誤訊息

java.lang.NumberFormatException: For input string: "x“

例外監控結束

應用程式結束

15.2 try-catch 敘述與 Java 例外處理機制

Page 14: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: finally 示範(從 catch 跳開)

程式錯誤訊息

java.lang.NumberFormatException: For input string: "x“

例外監控結束

x

return

15.2 try-catch 敘述與 Java 例外處理機制

Page 15: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

例外處理類別15.3 例外類別

封裝錯誤資訊的 Exception型態例外物件 ex

Page 16: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

Exception 類別方法15.3 例外類別

Page 17: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:應用程式的例外

詳細訊息: java.lang.NumberFormatException: For input string: "X"

簡要訊息: For input string: "X"

以下為錯誤路徑堆疊:

java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)錯誤方法: forInputString錯誤行號: 48…

發生錯誤直接跳至 catch 區塊

7.3 例外類別

Page 18: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

Throwable 與子類別

• Error表示應用程式所可能發生的各種嚴重錯誤,開發人員必須嘗試去排除這些狀況,避免它們在應用程式執行的過程中發生。

• Exception子類別有兩種:執行期錯誤與編譯時期錯誤資訊。

> 執行期錯誤在應用程式執行的過程中發生, catch 專門捕捉這一類的例外物件。

> 編譯時期錯誤無法通過編譯,很容易被修正,通常不會造成應用程式的問題。

15.3 例外類別

Page 19: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

衍生自 RuntimeException 類別的例外類別15.3 例外類別

Page 20: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:精確的捕捉例外

捕捉數字格式轉換的錯誤 NumberFormatException

數字格式的轉換錯誤,請指定數值

「 x 」轉換成為數字發生錯誤

15.3 例外類別

Page 21: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

多重 catch 語法

Try{// 例外監控區塊 …

}catch(Exceptionx nfex){…

}catch(Exceptiony aifex){…

}catch(Exception ex){…

}

多重 catch捕捉不同的例外物件

15.4 多重 catch

Page 22: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:多重 catch

charArray[3]取得「 x 」發生轉換失敗

捕捉數字格式錯誤

數字格式的轉換錯誤,請指定數值

15.4 多重 catch

Page 23: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:多重 catch – 除以 0 的錯誤

除以 0 的錯誤

無符合例外物件,由 Exception 捕捉

java.lang.ArithmeticException: / by zero

修正為 3 以排除錯誤

15.4 多重 catch

Page 24: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

throw 關鍵字與擲出例外物件

throw myExceptionObject

throw 關鍵字用來強制擲出例外物件

擲出的例外物件

15.5 設計自己的例外處理系統

Page 25: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: throw 程式化擲出例外示範

執出例外…程式執出的 ArithmeticException 例外

建立 ArithmeticExceptionm 例外物件

擲出例外物件

15.5 設計自己的例外處理系統

Page 26: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

throws 與強制例外捕捉

Public returnTypeName someMethod(…)   throws Exception{

…}

程式執行過程中,可能擲出例外,必須利用 try-catch 監控此方法

15.5 設計自己的例外處理系統

Page 27: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例: throws 強制例外捕捉( 1/2 )

擲出例外物件

除了 7 與 12 ,其它的數字均不符合發生其它錯誤如下 :For input string: "a"

15.5 設計自己的例外處理系統

Page 28: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

must be caught or declared to be thrown

範例: throws 強制例外捕捉( 2/2 )15.5 設計自己的例外處理系統

Page 29: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:不規則二維陣列

執出自訂例外物件錯誤訊息null

自訂繼承 Exception 的例外類別 CEx

建立自訂例外類別 CEx 物件擲出例外類別物件

15.5 設計自己的例外處理系統

Page 30: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:運用自訂例外類別( 1/3 )15.5 設計自己的例外處理系統

Page 31: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:運用自訂例外類別( 2/3 )

繼承 Exception 自訂例外類別 傳入自訂

錯誤訊息

throws 宣告擲出例外物件

擲出自訂例外類別 物件

15.5 設計自己的例外處理系統

Page 32: 第十五章 例外處理

Java SE 6 程式設計學習教本第十五章 例外處理

範例:運用自訂例外類別( 3/3 )

try-catch  捕捉 DivEx 例外物件

呼叫 DoDiv 偶數除法的錯誤:除數與不可為零

15.5 設計自己的例外處理系統