|
7 | 7 |
|
8 | 8 | -------- |
9 | 9 |
|
10 | | -10.1 例外處理入門 |
11 | | ------------------ |
| 10 | +# 10.1 例外處理入門 |
12 | 11 |
|
13 | 12 | 回憶一下 6.2.1 中介紹過的「命令列引數」(Command line argument),在還沒有學會使用Java的例外處理之前,為了確定使用者是否有提供引數,您可能要先檢查引數的陣列長度是否為 0,以免程式存取超過陣列長度而發生錯誤: |
14 | 13 |
|
@@ -79,8 +78,7 @@ public class CheckArgsDemo { |
79 | 78 | System.out.println(args[i]); |
80 | 79 | } |
81 | 80 |
|
82 | | -10.2 受檢例外(Checked Exception)、執行時期例外(Runtime Exception) |
83 | | ----------------------------------------------------------------------- |
| 81 | +# 10.2 受檢例外(Checked Exception)、執行時期例外(Runtime Exception) |
84 | 82 |
|
85 | 83 | 在某些情況下例外的發生是可預期的,例如使用輸入輸出功能時,可能會由於硬體環境問題,而使得程式無法正常從硬體取得輸入或進行輸出,這種錯誤是可預期發生的,像這類的例外稱之為「受檢例外」(Checked Exception),對於受檢例外編譯器會要求您進行例外處理,例如在使用 java.io.BufferedReader 的 readLine() 方法取得使用者輸入時,編譯器會要求您於程式碼中明確告知如何處理 java.io.IOException,範例 10.2 是個簡單的示範。 |
86 | 84 |
|
@@ -117,8 +115,7 @@ IOException 是受檢例外,是可預期會發生的例外,編譯器要求 |
117 | 115 |
|
118 | 116 | 如果 try...catch 後設定有 "finally" 區塊,則無論例外是否有發生,都一定會執行 "finally" 區塊。 |
119 | 117 |
|
120 | | -10.3 throw、throws |
121 | | -------------------- |
| 118 | +# 10.3 throw、throws |
122 | 119 |
|
123 | 120 | 當程式發生錯誤而無法處理的時候,會丟出對應的例外物件,除此之外,在某些時刻,您可能會想要自行丟出例外,例如在捕捉例外並處理結束後,再將例外丟出,讓下一層例外處理區塊來捕捉;另一個狀況是重新包裝例外,將捕捉到的例外以您自己定義的例外物件加以包裝丟出。若想要自行丟出例外,您可以使用 "throw" 關鍵字,並生成指定的例外物件,例如: |
124 | 121 |
|
@@ -257,8 +254,7 @@ public class ThrowsDemo { |
257 | 254 |
|
258 | 255 | > **良葛格的話匣子** 您也可以在定義介面(interface)時於方法上聲明"throws"某些類型的例外,然而要小心使用,因為若您在這些方法中發生了某些不是方法聲明的例外,您就無法將之"throw",只能自行撰寫一些try..catch來暗自處理掉,或者是重新包裝例外為"throws"上所聲明的例外,或者是將該例外包裝為RuntimeException然後再丟出。 |
259 | 256 |
|
260 | | -10.4 例外的繼承架構 |
261 | | -------------------- |
| 257 | +# 10.4 例外的繼承架構 |
262 | 258 |
|
263 | 259 | Java 所處理的例外主要可分為兩大類:一種是嚴重的錯誤,例如硬體錯誤或記憶體不足等問題,與此相關的類別是位於 java.lang 下的 Error 類別及其子類別,對於這類的錯誤通常程式是無力自行回復;另一種是非嚴重的錯誤,代表可以處理的狀況,例如使用者輸入了不合格式的資料,這種錯誤程式有機會回復至正常運作狀況,與這類錯誤相關的類別是位於 java.lang 下的 Exception 類別及其子類別。 |
264 | 260 |
|
@@ -365,8 +361,7 @@ public class ExceptionDemo2 { |
365 | 361 | - throws 父類別方法中未定義的其它例外 |
366 | 362 | - throws 被重新定義的方法上之例外之父類別 |
367 | 363 |
|
368 | | -10.5 斷言(Assertion) |
369 | | ---------------------- |
| 364 | +# 10.5 斷言(Assertion) |
370 | 365 |
|
371 | 366 | 例外是程式中非預期的錯誤,例外處理是在這些錯誤發生時所採取的措施。 |
372 | 367 | 有些時候,您預期程式中應該會處於何種狀態,例如某些情況下某個值必然是多少,這稱之為一種斷言。斷言有兩種結果:成立或不成立。當預期結果與實際執行相同時,斷言成立,否則斷言不成立。 |
@@ -421,8 +416,7 @@ public class AssertionDemo { |
421 | 416 |
|
422 | 417 | 簡單的說,斷言是判定程式中的某個執行點必然是某個狀態,所以它不能當作像 if 之類的判斷式來使用,Assertion 不應被當做程式執行流程的一部份。 |
423 | 418 |
|
424 | | -10.6 接下來的主題 |
425 | | ------------------ |
| 419 | +# 10.6 接下來的主題 |
426 | 420 |
|
427 | 421 | 每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容: |
428 | 422 |
|
|
0 commit comments