Apex 中的異常處理
在 Apex 中,和其他語言類似,對於異常處理通常使用 try、catch、finally、throw 等關鍵字。
對於每一個 try 代碼段,必須要有至少一個 catch 或 finally 代碼段,而 finally 代碼段最多只能有一個。
finally 代碼段是必然會執行的代碼段,無論異常有沒有發生。
異常處理的結果
當發生異常后,代碼執行會終止,而在此異常之前所有的數據庫 DML 操作都會回滾,無論是否已經在此之前設定了“保存點(SavePoint)”。
與此同時,相關的錯誤信息會寫入日志,用戶可以在“設置”界面下的 “Debug Logs” 選項中進行查看。錯誤信息也會顯示在用戶界面中。
異常類型
系統定義的異常類型有:
- DmlException:關於數據庫操作的異常
- ListException:關於列表操作的異常
- NullPointerException:關於空指針的異常
- QueryException:關於查詢語句的異常
- SObjectException:關於SObject對象的異常
它們共有的方法包括:
- getCause():給出異常原因
- getLineNumber():給出發生異常的行數
- getMessage():給出異常的詳細信息
- getStackTraceString():給出異常發生的棧信息
- getTypeName():給出異常的類型,比如 DmlException、NullPointerException 等
對於每個異常類型,還有自己的方法,比如 DmlException 就擁有 getDmlFieldNames()、getDmlMessage() 等方法。
標准格式
try {
// 執行操作,有可能發生異常
} catch(DmlException e) {
// 捕捉 DML 相關的異常
} catch(SObjectException e) {
// 捕捉 SObject 相關的異常
} catch(Exception e) {
// 發生異常之后,在此進行后續處理
} finally {
// 其他的操作,必然會執行的代碼段
}
如果要捕捉不同的異常類型,要將“一般異常類型”(Exception)放在最后。
自定義異常類型
對於系統自定義的異常類型,只能使用 catch 來捕捉,而不能使用 throw 語句來拋出。開發者也可以定義自己的異常類型。
自定義異常類型也是一個類,必須繼承 Exception 類或其任何子類。
自定義異常類型的名字必須以 Exception 結尾。
標准格式:
public class BaseException extends Exception {}
public class ExampleException extends BaseException {}
...
// 拋出異常類
throw new BaseException();
// 拋出異常類並加上錯誤信息
new ExampleException('An error occurred.');
// 拋出異常類並嵌套異常類變量
try {
throw new BaseException('First exception');
} catch (BaseException e) {
throw new ExampleException('Thrown with inner exception', e);
}