第十五章 例外處理
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 PresentationTRANSCRIPT
Java SE 6 程式設計學習教本第十五章 例外處理
第十五章 例外處理
迴圈
Java SE 6 程式設計學習教本第十五章 例外處理
範例:應用程式的例外15.1 關於程式錯誤
9 個元素值的陣列
intElement=intArray[9] ;
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9at GException.main(GException.java:11)
9 超出陣列索引範圍
Java SE 6 程式設計學習教本第十五章 例外處理
程式錯誤種類
編譯時期的錯誤
執行時期的錯誤
• 邏輯錯誤
• 特定的應用程式例外
• 系統錯誤
15.1 關於程式錯誤
Java SE 6 程式設計學習教本第十五章 例外處理
範例:傳統的應用程式的例外處理9 個元素,最大索引值等於8索引值大於 8則離開迴圈,避免錯誤
4 個元素,最大索引值等於3索引值大於 3則離開迴圈
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
傳統程式錯誤處理的問題
• 缺乏一致性,難以維護。
• 每一個錯誤必須有其專屬的處理版本。
• 難以處理隱藏性的錯誤。
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
try-catch 語法
try{
// 可能發生錯誤的程式區塊 …
}catch(Exception e){ // 例外類別
// 處理錯誤的程式碼區塊
}
監控區塊
錯誤處理區塊
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
try-catch 程式執行流程15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
範例: try-catch 示範
6 個元素最大索引值等於 5
指定索引值6 發生錯誤
跳至 catch區塊135
程式錯誤訊息:java.lang.ArrayIndexOutOfBoundsException: 6
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
try-catch 好處
• 讓所有的錯誤處理程式能夠有一致的處理方式。
• 不需預先針對各種錯誤撰寫特定的錯誤處理邏輯。
• 監控程式同時會針對各種未知或是隱藏的錯誤,自動處理。
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
finally 語法
try{// 可能發生錯誤的程式區塊 …
}catch(Exception e){ // 例外類別// 處理錯誤的程式碼區塊
}finally{// 例外處理終止
}
try-catch 終止程序
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
finally 程式流程7.3 二維陣列
Java SE 6 程式設計學習教本第十五章 例外處理
範例: finally 示範
1取得元素例外監控結束應用程式結束
15.2 try-catch 敘述與 Java 例外處理機制
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 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
範例: finally 示範(從 catch 跳開)
程式錯誤訊息
java.lang.NumberFormatException: For input string: "x“
例外監控結束
x
return
15.2 try-catch 敘述與 Java 例外處理機制
Java SE 6 程式設計學習教本第十五章 例外處理
例外處理類別15.3 例外類別
封裝錯誤資訊的 Exception型態例外物件 ex
Java SE 6 程式設計學習教本第十五章 例外處理
Exception 類別方法15.3 例外類別
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 例外類別
Java SE 6 程式設計學習教本第十五章 例外處理
Throwable 與子類別
• Error表示應用程式所可能發生的各種嚴重錯誤,開發人員必須嘗試去排除這些狀況,避免它們在應用程式執行的過程中發生。
• Exception子類別有兩種:執行期錯誤與編譯時期錯誤資訊。
> 執行期錯誤在應用程式執行的過程中發生, catch 專門捕捉這一類的例外物件。
> 編譯時期錯誤無法通過編譯,很容易被修正,通常不會造成應用程式的問題。
15.3 例外類別
Java SE 6 程式設計學習教本第十五章 例外處理
衍生自 RuntimeException 類別的例外類別15.3 例外類別
Java SE 6 程式設計學習教本第十五章 例外處理
範例:精確的捕捉例外
捕捉數字格式轉換的錯誤 NumberFormatException
數字格式的轉換錯誤,請指定數值
「 x 」轉換成為數字發生錯誤
15.3 例外類別
Java SE 6 程式設計學習教本第十五章 例外處理
多重 catch 語法
Try{// 例外監控區塊 …
}catch(Exceptionx nfex){…
}catch(Exceptiony aifex){…
}catch(Exception ex){…
}
多重 catch捕捉不同的例外物件
15.4 多重 catch
Java SE 6 程式設計學習教本第十五章 例外處理
範例:多重 catch
charArray[3]取得「 x 」發生轉換失敗
捕捉數字格式錯誤
數字格式的轉換錯誤,請指定數值
15.4 多重 catch
Java SE 6 程式設計學習教本第十五章 例外處理
範例:多重 catch – 除以 0 的錯誤
除以 0 的錯誤
無符合例外物件,由 Exception 捕捉
java.lang.ArithmeticException: / by zero
修正為 3 以排除錯誤
15.4 多重 catch
Java SE 6 程式設計學習教本第十五章 例外處理
throw 關鍵字與擲出例外物件
throw myExceptionObject
throw 關鍵字用來強制擲出例外物件
擲出的例外物件
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例: throw 程式化擲出例外示範
執出例外…程式執出的 ArithmeticException 例外
建立 ArithmeticExceptionm 例外物件
擲出例外物件
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
throws 與強制例外捕捉
Public returnTypeName someMethod(…) throws Exception{
…}
程式執行過程中,可能擲出例外,必須利用 try-catch 監控此方法
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例: throws 強制例外捕捉( 1/2 )
擲出例外物件
除了 7 與 12 ,其它的數字均不符合發生其它錯誤如下 :For input string: "a"
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
must be caught or declared to be thrown
範例: throws 強制例外捕捉( 2/2 )15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例:不規則二維陣列
執出自訂例外物件錯誤訊息null
自訂繼承 Exception 的例外類別 CEx
建立自訂例外類別 CEx 物件擲出例外類別物件
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例:運用自訂例外類別( 1/3 )15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例:運用自訂例外類別( 2/3 )
繼承 Exception 自訂例外類別 傳入自訂
錯誤訊息
throws 宣告擲出例外物件
擲出自訂例外類別 物件
15.5 設計自己的例外處理系統
Java SE 6 程式設計學習教本第十五章 例外處理
範例:運用自訂例外類別( 3/3 )
try-catch 捕捉 DivEx 例外物件
呼叫 DoDiv 偶數除法的錯誤:除數與不可為零
15.5 設計自己的例外處理系統