1 / 32

第十五章 例外處理

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

Download Presentation

第十五章 例外處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十五章 例外處理 迴圈

  2. 15.1 關於程式錯誤 範例:應用程式的例外 9 個元素值的陣列 intElement=intArray[9] ; 9 超出陣列索引範圍 Exception in thread "main" java.lang. ArrayIndexOutOfBoundsException: 9 at GException.main(GException.java:11)

  3. 15.1 關於程式錯誤 程式錯誤種類 編譯時期的錯誤 執行時期的錯誤 • 邏輯錯誤 • 特定的應用程式例外 • 系統錯誤

  4. 15.2 try-catch敘述與Java例外處理機制 範例:傳統的應用程式的例外處理 9個元素,最大索引值等於8 索引值大於8則離開迴圈,避免錯誤 4個元素,最大索引值等於3 索引值大於3則離開迴圈

  5. 15.2 try-catch敘述與Java例外處理機制 傳統程式錯誤處理的問題 •  缺乏一致性,難以維護。 •  每一個錯誤必須有其專屬的處理版本。 •  難以處理隱藏性的錯誤。

  6. 15.2 try-catch敘述與Java例外處理機制 try-catch 語法 監控區塊 try{ // 可能發生錯誤的程式區塊 … }catch(Exception e){ //例外類別 // 處理錯誤的程式碼區塊 } 錯誤處理區塊

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

  8. 15.2 try-catch敘述與Java例外處理機制 範例:try-catch 示範 6個元素 最大索引值等於5 指定索引值6 發生錯誤 跳至catch區塊 135 程式錯誤訊息: java.lang.ArrayIndexOutOfBoundsException: 6

  9. 15.2 try-catch敘述與Java例外處理機制 try-catch 好處 •  讓所有的錯誤處理程式能夠有一致的處理方式。 •  不需預先針對各種錯誤撰寫特定的錯誤處理邏輯。 •  監控程式同時會針對各種未知或是隱藏的錯誤,自動處理。

  10. 15.2 try-catch敘述與Java例外處理機制 finally 語法 try{ // 可能發生錯誤的程式區塊 … }catch(Exception e){ //例外類別 // 處理錯誤的程式碼區塊 }finally{ // 例外處理終止 } try-catch 終止程序

  11. 7.3 二維陣列 finally 程式流程

  12. 15.2 try-catch敘述與Java例外處理機制 範例:finally示範 1 取得元素 例外監控結束 應用程式結束

  13. 15.2 try-catch敘述與Java例外處理機制 範例:finally示範(進入catch) String[] strArray = {"x","2","3","4","5","6"}; 索引值 0 的第一個元素是「x」,轉換成為Integer 發生錯誤 程式錯誤訊息 java.lang.NumberFormatException: For input string: "x“ 例外監控結束 應用程式結束

  14. 15.2 try-catch敘述與Java例外處理機制 範例:finally示範(從 catch 跳開) x 程式錯誤訊息 java.lang.NumberFormatException: For input string: "x“ 例外監控結束 return

  15. 15.3 例外類別 例外處理類別 封裝錯誤資訊的Exception型態例外物件 ex

  16. 15.3 例外類別 Exception 類別方法

  17. 7.3 例外類別 範例:應用程式的例外 發生錯誤 直接跳至catch區塊 詳細訊息:java.lang.NumberFormatException: For input string: "X" 簡要訊息:For input string: "X" 以下為錯誤路徑堆疊: java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 錯誤方法:forInputString 錯誤行號:48 …

  18. 15.3 例外類別 Throwable 與子類別 • Error • 表示應用程式所可能發生的各種嚴重錯誤,開發人員必須嘗試去排除這些狀況,避免它們在應用程式執行的過程中發生。 • Exception • 子類別有兩種:執行期錯誤與編譯時期錯誤資訊。 > 執行期錯誤在應用程式執行的過程中發生,catch專門捕捉這一類的例外物件。 > 編譯時期錯誤無法通過編譯,很容易被修正,通常不會造成應用程式的問題。

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

  20. 15.3 例外類別 範例:精確的捕捉例外 捕捉數字格式轉換的錯誤NumberFormatException 「x」轉換成為數字發生錯誤 數字格式的轉換錯誤,請指定數值

  21. 15.4 多重 catch 多重 catch 語法 Try{ // 例外監控區塊 … }catch(Exceptionx nfex){ … }catch(Exceptiony aifex){ … }catch(Exception ex){ … } 多重catch捕捉不同的例外物件

  22. 15.4 多重 catch 範例:多重 catch charArray[3] 取得「x」 發生轉換失敗 捕捉數字格式錯誤 數字格式的轉換錯誤,請指定數值

  23. 15.4 多重 catch 範例:多重 catch – 除以 0 的錯誤 修正為 3 以排除錯誤 除以0的錯誤 無符合例外物件,由Exception捕捉 java.lang.ArithmeticException: / by zero

  24. 15.5 設計自己的例外處理系統 throw 關鍵字與擲出例外物件 throw 關鍵字用來強制擲出例外物件 throw myExceptionObject 擲出的例外物件

  25. 15.5 設計自己的例外處理系統 範例:throw 程式化擲出例外示範 建立 ArithmeticExceptionm例外物件 擲出例外物件 執出例外… 程式執出的 ArithmeticException 例外

  26. 15.5 設計自己的例外處理系統 throws 與強制例外捕捉 Public returnTypeName someMethod(…) throws Exception{ … } 程式執行過程中,可能擲出例外,必須利用 try-catch 監控此方法

  27. 15.5 設計自己的例外處理系統 範例:throws 強制例外捕捉(1/2) 擲出例外物件 除了7與12,其它的數字均不符合 發生其它錯誤如下: For input string: "a"

  28. 15.5 設計自己的例外處理系統 範例:throws 強制例外捕捉(2/2) must be caught or declared to be thrown

  29. 15.5 設計自己的例外處理系統 範例:不規則二維陣列 建立自訂例外類別CEx物件 擲出例外類別物件 自訂繼承 Exception 的例外類別CEx 執出自訂例外物件錯誤訊息 null

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

  31. 15.5 設計自己的例外處理系統 範例:運用自訂例外類別(2/3) throws宣告擲出例外物件 擲出自訂例外類別 物件 繼承Exception自訂例外類別 傳入自訂錯誤訊息

  32. 15.5 設計自己的例外處理系統 範例:運用自訂例外類別(3/3) try-catch 捕捉 DivEx 例外物件 呼叫 DoDiv 偶數除法的錯誤:除數與不可為零

More Related