Java的例外(Exception)繼承體系大致可分成兩大類:Checked Exception及Unchecked Exception,其中Checked Exception指的是在程式語法上需明確使用try-catch或throws的語法,才能通過編譯器的檢查。此外,為了使程式中開啟的任何資源得以確實釋放,我們會選擇用try-catch-finally的語法,並透過finally的程式區塊來釋放資源。
以下的範例程式是透過傳統的IO來進行檔案的複製:

在上述的程式片段中,為了使開啟的串流物件得以在finally程式區塊中關閉,我們得將串流物件的宣告寫在try-catch的語法之外。而為了明確捕捉任何可能的例外,我們也得寫好幾段catch的程式區塊,藉以精確詳述發生例外的真正原因。但是,這樣的程式寫來不僅冗長易錯,且又曠日廢時。
為了改善這些缺點,Java SE 7引進了try with resource及multi-catch的語法來根除這些惱人的弊病。同樣的程式經過新進語法的改善如下:

try with resource的語法可以在try關鍵字後面用小括號宣告要開啟的資源,將來這些資源會按照開啟的先後順序,逆向自動關閉,所以就省去了透過finally區塊關閉資源的需求。而multi-catch的語法則可將多個目的相似的catch區塊整合在一起,以省去多餘重複程式碼的撰寫。如此一來,程式不但大幅精簡、更易開發,程式碼的可讀性自然也大幅度的提升。
|