十一、Exception與Assertion

Download Report

Transcript 十一、Exception與Assertion

Java 入門到認證
十一、Exception 與
Assertion
作者:許裕永
1、Exception

1-1 UnChecked
n
Exceptio
 沒有針對可能產生錯誤的程式碼,撰寫錯誤處理機制,
而程式仍然可以編譯。那麼這個Exception便
屬於UnChecked Exception。

1-2 Checked Exception
 沒有針對可能產生錯誤的程式碼,做錯誤處理機制,程
式在編譯時便會失敗。那麼這個Exception便
屬於Checked Exception。
2、try

catch
lly
fina
2-1 try catch
 將可能會產生錯誤的程式碼寫在try的區塊中,再用catch來接收J
ava傳入的Exception物件。catch可以一個以上。
 每個catch區塊中的變數名稱都是獨立的區域變數,所以兩個catc
h中的Exception都命名為e,是合法的。

2-2 try catch finally
 我們應該要把跟try區塊中的程式碼有關聯,而且一定要執行的程式敍述,
寫在finally的區塊中。

2-3 try finally
 try區塊後可以直接寫finally,而不寫任何catch。

2-4 巢狀try catch
 如同if跟for一樣,try
catch也可以是巢狀的。
3、throws
 3-1
與
throw
throws
方法中如果有丟出Checked
Excep
tion物件的敍述句,則必須在方法名稱後以
throws宣告。
 3-2
throw
在程式碼中可以用throw指定丟出的Exc
eption物件。
4、自訂Exception物件
 4-1
extends
class
ClassName exten
ds Exception{}
自訂的Exception均屬於Checke
d Exception 。
5、Assertion

5-1 assert


assert 運算式A[:運算式B];
5-2 啟動指令
 -ea
 -da

5-3 適當的使用時機
 不要在assert中執行必要的運算。
 不要用Assertion機制來檢測public方法的參數。
 不要用Assertion機制來檢測方法的運算結果。
 建議使用Assertion機制來檢測private方法的參數。
 建議使用在switch的語法,來了解case不成立的原因。
 程式碼重點的標註。
6、認證重點整理


6-1 Exception
 Assertion是開發時期的錯誤處理機制,而Exception是執行時期的錯誤處理
機制。
 Exception是一個類別名稱,它底下有許多的子類別分別代表各種不同狀況產生的錯誤。
 沒有撰寫錯誤處理,而程式一樣可以編譯的Exception屬於UnCheck Exce
ption。
 沒有撰寫錯誤處理,程式就無法編譯的Exception屬於Check Exceptio
n。
 觀念:1、所謂產生Exception其實是建構了某一個Exception類別的物件。
2、建立Exception物件的是Java。3、Exception物件會先傳回程式之
中。
6-2 try catch finally
 將可能會產生錯誤的程式碼寫在try的區塊中,再用catch來接收Java傳入的Exc
eption物件。catch可以一個以上。
 catch區塊執行完畢後,並不會再回頭去執行try區塊中未執行的程式碼。
 Exception在catch中的排列,父類別要置於子類別下方。
 我們應該要把跟try區塊中的程式碼有關聯,而且一定要執行的程式碼,寫在finally
的區塊中。
 如果變數a宣告在try的區塊中,那麼變數a就只存活在try的區塊,無論是catch或
finally的區塊都不能存取。
 try區塊後可以直接寫finally,而不寫任何catch。
 如同if跟for一樣,try catch也可以是巢狀的。
 try catch finall是整體,各個區塊之間,不可以撰寫任何敍述句。
6、認證重點整理(二)

6-3 throws 與 throw
 方法中如果有丟出Checked




Exception物件的敍述句,則必須在方
法名稱後以throws宣告。
丟出Checked Exception的方式有兩種。第一種是:呼叫有宣告t
hrows ChecdedException的方法,而該呼叫敍述沒有置放於
try catch的機制之中。另一種就是:在程式碼中用throw指定丟出的
Exception物件。
方法中不想丟出去的Checked Exception應該自行用try ca
tch處理。
方法中想丟出去的Checked Exception必須在方法名稱後面用th
rows宣告。
throw可以丟出的Exception物件,不管是UnChecked或Ch
ecked的Exception都可以。只是,如果是Checked Exce
ption就一定要宣告於throws的後面;但如果是UnChecked E
xception則是否宣告於throws後方都可以。
6、認證重點整理(三)


6-4 自訂Exception
 自訂的Exception均屬於Checked Exception。
6-5 Assertion
 Assertion機制的開啟及關閉是相當具有彈性,可以指定類別或package開啟;
也可以指定開啟的同時又指定部份的類別或package關閉。
 Assertion機制是讓設計師設定程式中斷點,來協助處理邏輯錯誤的機制。
 assert是在條件值為true時繼續執行,條件值為false時中斷程式。也就是條件
值應該是設計師預期要的值,而當執行時期該值不符合設計師的期望時,中斷程式。
 Assertion機制在使用者執行時,是肯定關閉的,因為使用者不會去開啟它,也沒有必
要。
 Assertion機制所產生的error是用來中斷程式,協助我們除錯,請不要把它當做
另一種if的語法來寫,更不要用try catch的機制來補捉這個AssertionE
rror。
 不要在assert中執行必要的運算。
 不要用Assertion機制來檢測public方法的參數。
 不要用Assertion機制來檢測方法的運算結果。
 建議使用Assertion機制來檢測private方法的參數。
 建議使用在switch的語法中,來了解case不成立的原因。