Exception ステートメント
Apex では、Exception を使用して、コード実行の正常な流れを中断させるエラーその他のイベントを記録します。throw ステートメントは例外の生成に使用でき、try、catch、および finally は例外から適切に復旧するために使用できます。
throw ステートメント
throw ステートメントを使用して、エラーが発生したことを通知できます。例外を発生させるには、throw ステートメントに例外オブジェクトを指定して、特定のエラーに関する情報を提供します。次に例を示します。
Try-Catch-Finally ステートメント
try、catch、finally の各ステートメントを使用して、発生した例外から適切に復旧できます。
- try ステートメントは例外が発生する可能性のあるコードのブロックを識別します。
- catch ステートメントは、特定の種類の例外を処理できるコードのブロックを識別します。1 つの try ステートメントに、catch ステートメントを 1 つ以上関連付けられます (まったく関連付けないこともできます)。各 catch ステートメントには一意の例外種別が必要です。また、特定の例外種別が 1 つの catch ブロックでキャッチされると、残りの catch ブロックが存在する場合でもそれらのブロックは実行されません。
- finally ステートメントは実行が保証されているコードのブロックを識別し、コードをクリーンアップすることができます。1 つの try ステートメントに finally ステートメントを 1 つまで関連付けられます。finally ブロックのコードは、例外の発生の有無や発生した例外の種別に関係なく、常に実行されます。finally ブロックは常に実行されるため、リソースの解放などのクリーンアップコードに使用します。
構文
try、catch、および finally ステートメントの構文は次のとおりです。
try ブロックを使用する場合は、catch ブロックと finally ブロックの少なくともいずれかが存在する必要があります。try-catch ブロックの構文は次のとおりです。
try-finally ブロックの構文は次のとおりです。
これは、try-catch-finally ブロックの骨格のみの例です。
キャッチできない例外
キャッチできない特殊なタイプの組み込み例外もあります。このような例外は、Force.com プラットフォームの重大な状況に関連付けられています。このような状況では、コードの実行を中止する必要があります。例外処理で実行を再開することはできません。このような例外の 1 つとして、ガバナ制限に達した場合 (SOQL クエリの最大発行数に達した場合など) に実行時に発生する制限の例外 (System.LimitException) があります。他の例として、アサーションステートメント (System.assert メソッドを使用) に失敗した場合に発生する例外やライセンスの例外が挙げられます。
例外をキャッチできない場合、catch ブロックや finally ブロック (ある場合) は実行されません。