Javaプログラミングで、例外通知を受け取る書き方

Javaプログラミングで例外通知を受け取る書き方を、知りたいです。

Javaプログラミングで例外を受け取る場合、catch文で例外通知を受け取ります。
そこで例外処理を行ないます。

適切なメソッド内にcatch文を記述して、適切に例外処理を行なってください。
そうしたら、プログラム実行中に例外が発生しても、アプリは正しく動作します。

Javaプログラミングで、メソッド内で例外を受け取る書き方

プログラム実行中に例外が発生した場合、その例外をメソッド内で受け取る書き方があります。
発生した例外を、メソッド内で対処したい(解決したい)場合の書き方です。

「例外処理の流れ」は、以下のようなイメージです。
赤線が「例外処理の流れ」を示します。

例外が発生したメソッド内のcatch文で、例外通知を受け取ります。
そこで例外処理に対処します。

例外処理の流れ

「この例外処理の流れ」は、水平に右方向に行き、そして下方向に行きます。
水平に右方向に行く点が、「正常処理の流れ」と違います

例外の対処(解決処理)は、メソッド内のcatch文に書きます。
同じメソッド内に「発生した例外」と「その対処」が書かれているので、「例外処理の流れ」を理解しやすいと思います。

try文とcatch文の距離が近いほど、「例外処理の流れ」を理解しやすいです。

メソッド内で例外を受け取る書き方の例

実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

例外処理の例

例外は、「ファイルが見つからない」という例外です。
次の文で、その例外を通知します。

throw new Exception("not found file name = " + fileName);

例外の対処は、「ファイルを読み込むことができません」というエラーメッセージを、画面に表示することです。

次の文で、そのエラーメッセージを表示します。

window.showErrorMessage(fileName + jp.Resource.get("canNotReadFile"));

同じメソッド内に、

  • 「ファイルが見つからない」という例外と、
  • 「エラーメッセージを表示する」という対処が

書かれています。

よって「例外処理の流れ」を理解しやすい、と思います。

Javaプログラミングで、別のメソッドで例外を受け取る書き方

プログラム実行中に例外が発生した場合、その例外を他のメソッドで受け取る書き方があります。
発生した例外について、他のメソッド内で対処したい(解決したい)場合の書き方です。

「例外処理の流れ」は、以下のようなイメージです。
赤線が、「例外処理の流れ」を示します。

例外が発生したメソッドとは別のメソッドにおいて、catch文で例外通知を受け取ります。
別のメソッドのcatch文で、例外処理に対処します。

他のメソッドに通知する例外

クラスAのメソッドAから、クラスBのメソッドBを呼び出します。
そのメソッドBにおいて、例外が発生します。
例外の対処(解決処理)は、クラスAのメソッド内にあるcatch文に書きます。

このように例外を通知する場合、メソッドBを呼び出したメソッドAにおいて、メソッドBで発生した例外について対処できます。

もしもメソッドBが、ある2個のメソッドから呼び出された場合、メソッドBの例外について、それら2個のメソッド内で、それぞれで例外の対処を行なえます。

別のメソッドで例外を受け取る書き方の例

実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

「他のメソッドに通知する例外」の例

次の文で、ExTextFieldクラスのgetValue()メソッドを、呼び出します。

minValueField.getValue();

次の文において、変数textの値が数値に変換できない文字列形式の場合、例外が起きます。

例:変数textが文字列"abc"の場合、例外NumberFormatExceptionが起きます。

Integer.parseInt(text);

その例外は、getValue()メソッドの呼び出し先であるNumericalRangeFieldPanelクラス、getMinValue()メソッドに通知されます。

そのgetMinValue()メソッド内のcatch文において、例外の対処(解決処理)をします。
次の文で例外の対処として、最小の値として1を返す、としています。

例:変数textが文字列"abc"の場合、最小の値として1を返して、プログラム処理を続けます。

return 1;

このgetValue()メソッドのように、例外を他のメソッドに通知する場合、例外の対処は、getValue()メソッドの「それぞれの呼び出し先」で、決めることができます。

例えば別のメソッドにおいて、例外の対処として最小の値100を返す、という風に決められます。

「それぞれの呼び出し先」で例外の対処法を決めたい場合は、このようにプログラムを書くと良いです。

Javaプログラミングで、例外処理を中止する書き方

例外が発生した場合、処理を中止する書き方があります。
その例外により、その後の処理の続行を諦める(ギブアップする)場合の書き方です。

実行中のプログラムでは解決できない問題(例外)が起きた時など、このような書き方をします。

「例外処理の流れ」は、以下のようなイメージです。
赤線が、「例外処理の流れ」を示します。

任意のメソッドにおいて、catch文で例外通知を受け取ります。
そこで、例外処理を中止します。

例外処理の中止

この「例外処理の流れ」は、水平に右方向に行き、そして下方向に行きます。
そしてcatch文に来ます。

しかし、ここでは例外に対処することを諦めて、再び例外を通知します。
例:RuntimeExceptionを通知します。

このRuntimeExceptionは、受け止める(catchする)必要がない例外です。
このような受け止める必要がない例外を通知することによって、例外に対処することを諦めます。

例外処理を中止する書き方の例

実際のメソッドについて、例外処理の例を示します。
ここではまず、赤線を見てください。
プログラムの詳細を理解する必要は、ありません。

「例外処理の中止」の例

次の文で、SAX Perserのオブジェクトを作成します。

factory.newSAXParser();

もしも、そのオブジェクトの作成に失敗した場合は、例外が通知されて、処理がcatch文に来ます。

このSAX Perserオブジェクトの作成が失敗する原因は、プログラムの実行環境にあります(ほとんどの場合で実行環境に原因がある、と言えます)。

実行環境に原因があるため、実行中のプログラムは「その例外(問題)」を解決できません。

よって次の文で例外を通知して、処理の続行を諦めます。

throw new RuntimeException("could not create SAX Parser", cause);

SAX Perserオブジェクト作成失敗という例外を、解決する方法

SAX Perserオブジェクト作成失敗という例外を解決する方法は、

例えばsaxParser.jarファイル(仮名)を、適切なディレクトリ内にコピーする、という方法です。

例えば実行中のプログラムが、どこからかsaxParser.jarファイルを探し出して、適切なディレクトリ内にコピーすることになります。

ただし、このような処理をすることは困難だと思います。

もしかしたらプログラムのインストール時、ハードディスク内にsaxParser.jarファイルをコピーし忘れているかもしれないからです。

※この記事は、2004年6月当時の記事になります。

【まとめ記事】Javaアプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を限定する書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス…