跳到主要內容

Exception And Assertion

 


頻道需要你的支持,謝謝你成為我們的會員(加入會員)

影片1  為什麼要使用與應用錯誤處理機制



影片2  Java 中常見的 Exception



影片3  用 try - catch 處理 Exception



影片4  finally 的使用與 throws  未發布



影片5 throw 的應用與 Checked / Unchecked Exception



影片6 try with resources 與 catch multiple Exception




影片7 Custom Exception 



影片8 Assertion 機制與使用時機介紹



範例


Exception 

錯誤處理機制

程式執行是以方法為單位,在某一個方法的執行過程中。若發生錯誤,Java 會將該錯誤的相關訊息包裝在 Exception 物件當中。並把這個 Exception 物件,丟回給產生錯誤的方法。

 

為什麼發生錯誤?

l   程式碼的不完善造成錯誤。

l   應用程式無法控制的因素。例如:資料庫無法存取、硬碟發生故障。

 

Exception Type

l   錯誤處理機制的最上層類別是 java.lang.Throwable

l   錯誤處理機制主要的類別是繼承自 Throwable Error Exception

l   Error 與它的子類別,用來呈現關於 JVM 的問題,一般而言是無法回復的。而且程式設計師,也沒有辦法針對那一種錯誤做太多的處理。

l   Exception 與它的子類別,用來呈現程式碼的問題。程式設計師必須針對各種 Exception 進行處理或宣告丟出。

 

處理 Exception

l   try-catch

n   將程式碼置於 try 區塊中。

n   catch 宣告要捕捉的 Exception 並撰寫對應程式碼。

n   try 區塊的程式碼若產生 Exception,會中斷 try 的執行。而宣告捕捉 Exception catch 區塊會執行。

n   catch 可以一個以上。

n   try 區塊的程式碼若產生 Exception,但是都沒有 catch 區塊可以捕捉,會中斷程式的執行。

n   一個以上的 catch 宣告捕捉不同的 Exception 時,必須先宣告子類別。

n   try 區塊的程式碼若沒有產生 Exception,所有 catch 區塊都不會執行。

l   finally

n   try 區塊執行過程都沒有產生 exception。會在 try 區塊執行完成後執行。

n   try 區塊執行過程中產生 exception。會在對應的 catch 區塊執行完後執行。

n   try 區塊執行過程中產生 exception。但是沒有對應的 catch 區塊可以執行。在中斷前執行。

n   try 區塊或 catch 區塊中有 return 敘述。會在 return 前執行。

 

 

丟出 Exception

l   throws

在方法參數列後面。宣告本方法會丟出的 Exception 類別。

l   throw

在方法本體中。指定要丟出的 Exception物件。

 

Checked and Unchecked

l   Checked

編譯器會檢查的 exception。若方法中的程式碼會產生 Checked exception,將造成編譯錯誤。

l   Unchecked

編譯器不會檢查的 exception。即使方法中的程式碼會產生 Unchecked exception,也不會造成編譯錯誤。

 

try with resource

l   try(resource; resource; …)

n   try 後面的小括號中宣告並指派 resources 物件。

n   Resource 物件可以一個以上用 隔開。

n   所有在小括號中建立的 resources 會在 try 區塊執行完畢時。依照建立的反向順序自動關閉。

n   避免為了關閉 resources 撰寫冗長的 finally

l   auto closable

n   任何類別 implements java.lang.AutoCloseable。都可以作為 resources。應用在try with resource

l   After JDK 9

n   如果 resources 是指派給 final 或實際上 final 的變數。就可以直接使用在Try with resource

 

Catch multiple Exceptions

l   若有多個 catch 區塊中,要執行的程式碼是一樣的。可以在 catch 的小括號中,用分隔線隔開,宣告一個以上的 exception,來避免程式碼重複。

l   使用分隔線隔開的多個 exception,不可以有上下層類別的關係。

 

Custom Exception

l   Java允許設計師依照需求自行開發Exception

n   Checked

繼承 Exception

n   Unchecked

繼承 RuntimeException

 

Assertion

讓你可以在一個方法中,用 assert 來註記與驗證你的假設與內部邏輯。

l   assert statement:

n   assert booleanExpression;

assert 右邊的值如果是 false。會丟出 AssertionError 中斷程式的執行。

n   assert booleanExpression : expression;

assert 右邊的值如果是 false。會丟出 AssertionError 中斷程式的執行,並列印右邊的值。

l   Assertion 的檢查,預設是關閉的。要啟動 Assertion 的檢查,必須在命令列下參數。

n   java -ea MyProgram

n   java -enableassertions MyProgram

l   不適當的使用。

n   不要使用 assertion 檢查 public 方法的參數。

n   不要在 assert 的敘述中呼叫產生邊際效應的方法。