2008年12月26日金曜日

例外の構成


  • 例外の種類
    Error: 重大例外(回復不能)
    Exception: catch必須、プログラムで回避不可能
    RuntimeException: catch必須ではない、プラグラムで回避可能

  • 呼び出し元で処理する例外があるメソッドでは、定義に throwsを付加
    この場合、メソッド内では該当例外のcatch処理不要
    ただし、スーパー例外クラスをcatchしている場合にはcatchしないとそちらで処理されてしまうので、catch→throwが必要。
    内部処理が伴う場合も、catch→内部処理→throw。

  • try,catch,finally節
    catch節は例外クラスごとに複数記述可能
    複数記述で重複一致時は先に記述されている節で処理する
    →上位クラスでのcatchを先に書くと到達不能catch節としてコンパイルエラーとなる
    finally節はひとつだけ、正常/異常時ともに実施する処理を記述(close処理など)
    finally節にreturn文があると異常時もreturnが実行される
    →戻り値のある関数では紛らわしい
    →基本としてfinally節にはreturn文を書かない

  • 「コンパイル時にチェックされない例外やエラー」を独自に実装する
    java.lang.RuntimeExceptionを継承するのが普通

  • 独自に例外を定義する方法
    Exceptionクラスを継承

    ※呼び出し元は例外処理の記述が強制される
    ※独自の例外クラスを変更した場合、呼び出し元の変更が必要となる場合もある

    独自の例外に置き換えてthrowする場合は

    1. 独自例外クラスにはthrowableを引数とするコンストラクタを定義

    2. 受け取った例外オブジェクトから独自例外クラスobjを作成してthrow



  • 例外を使うと処理の流れを変えることができる
    条件文のような使い方も可能だが、例外は「例外的な処理が発生したことを通知、捕捉する」という目的のもの
    →本来の目的で使用するべき

0 件のコメント: