例外処理


プログラムエラー


プログラムが実行中に何らかの原因で誤動作したり、正常に終了しなかったりした場合をエラーまたはエラーと呼びます.
エラー

  • コンパイルエラー:コンパイル時に発生したエラー(最良のエラー)

  • ランタイムエラー:ランタイムに発生したエラー

  • 論理エラー:実行できますが、動作と意図は異なります.
  • コンパイラは、スペルエラー、構文エラー、データ型チェックなどのソースコードの基本的なチェックを実行します.
    コンパイラは基本事項をフィルタできますが、実行時に発生する可能性のある潜在的なエラーは排除できません.
    Javaは、実行時に発生する可能性のあるプログラムエラーを「エラー」と「例外」の2つに分類します.

  • エラー:プログラムコードで処理できない重大なエラー

  • 例外:プログラムコードによる軽微なエラー
  • 例外クラスの階層


    JAvaは、実行時に発生する可能性のあるエラーをクラスとして定義します.

    すべての例外の最上位の祖先はExceptionクラスであり、Exceptionから継承階層を表示すると以下のようになります.

    上の継承階層図の青いブロックのレベルは、他のレベルとは異なります.

  • Exceptionクラス:ユーザーエラーなど外部要因による異常
    (ArrayIndexOutof..., NullPointer..., Arithmetic...)

  • RuntimeExceptionクラス:プログラマのエラーによる例外
    (FileNotFound..., ClassNotFound..., DataFormat...)
  • 例外処理方法

  • printStackTrace():例外発生時にスタック内のメソッドを呼び出す情報と例外メッセージを画面に出力
  • getMessage():発生した例外クラスインスタンスに格納されたメッセージを取得することができる.
  • 異常をきたす


    キーワードthrowを使用して、例外を故意に生成することができる.new Exception(String)を使用して新しい例外クラスオブジェクトを作成し、throw演算子を使用して放出します.
    Stringをコンストラクション関数に入れると、そのStringはExceptionインスタンスにメッセージとして格納されます.
    これはgetMessage()と解読された情報です.

    メソッドに例外を宣言


    メソッドに例外を宣言することもできます.
    メソッドで例外を宣言する場合は、メソッドの宣言子にthrowsを使用して、メソッドで発生する可能性のある例外を書き出します.複数の例外は、カンマ「,」で宣言できます.
    void method() throws Exception1, Exception2, Exception3 { }
    最も古いExceptionクラスを宣言すると、すべてのタイプのExceptionが除外されます.
    以前にoverlightingで見たように、overlightingでは宣言された例外の個数だけでなく、継承関係も考慮されます.

    カスタム例外の作成


    プログラマは、新しい例外クラスを定義して使用できます.
    class MyException extends Exception {
    	MyException(String msg) {
        	super(msg);
        }
    }
    Exceptionクラスから継承して作成します.
    必要に応じて、メンバー変数またはメソッドを追加できます.
    Exceptionクラスは、作成時にString値を受信してメッセージとして保存できます.
    ユーザー定義の例外クラスドメインメッセージを保存するには、Stringをパラメータとするジェネレータを追加する必要があります.

    復習しましょう。


    この章は少し軽く読む傾向がある.
    現在、例外の処理はまだ内功が足りないようだ.
    例外処理こそ経験の積み重ねであり,必ず後で読まなければならない.