Apex 的異常處理

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);
} 

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,144評論 0 62
  • Java異常類型 所有異常類型都是Throwable的子類,Throwable把異常分成兩個不同分支的子類Erro...
    予別她閱讀 961評論 0 2
  • 短劇《校合唱團的秘密》的背景是一所小學,在這所小學有個合唱團,允許所有的學生加入,并且這個合唱團獲得過多次獎項,久...
    君子琴閱讀 200評論 0 1
  • B2B電商一路走來,發展出多種模式,對各行各業均產生不小的影響,為實體企業帶來不少紅利,尤其是傳統企業。在過去的一...
    你為什么這么666閱讀 256評論 0 0