例外処理・Javaソースコードの書き方

メソッド内に例外を通知

例外が発生した場合、その例外をメソッド内に通知する書き方があります。
発生した例外を、メソッド内で対処したい(解決したい)場合の書き方です。

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

例外処理の流れ

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

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

例外処理の例

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

例外処理の例

例外は、「ファイルが見つからない」という例外です。
次の文で、その例外を通知します。
throw new Exception(“not found file name = ” + fileName);

例外の対処は、「ファイルを読み込むことができません」というエラーメッセージを、画面に表示することです。
次の文で、そのエラーメッセージを表示します。
window.showErrorMessage(fileName + jp.Resource.get(“canNotReadFile”));

同じメソッド内に、

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

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

例外を他のメソッドに通知

例外が発生した場合、その例外を他のメソッドに通知する書き方があります。
発生した例外について、他のメソッド内で対処したい(解決したい)場合の書き方です。

「例外処理の流れ」は、次のようなイメージです。
赤線が、「例外処理の流れ」を示します。
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 を返す、という風に決められます。
「それぞれの呼び出し先」で例外の対処法を決めたい場合は、このようにプログラムを書くと良いでしょう。

例外処理の中止

例外が発生した場合、処理を中止する書き方があります。その例外により、その後の処理の続行を諦める(ギブアップする)場合の書き方です。
実行中のプログラムでは解決できない問題(例外)が起きた時など、このような書き方をします。

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

例外処理の中止

この「例外処理の流れ」は、水平に右方向に行き、そして下方向に行きます。
そしてcatch文に来ます。
しかし、ここでは例外に対処することを諦めて、再び例外を通知します。
例:RuntimeExceptionを通知します。

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

例外処理の例

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

「例外処理の中止」の例

次の文で、SAX Perserのオブジェクトを作成します。
factory.newSAXParser();

もしも、そのオブジェクトの作成に失敗した場合は、例外が通知されて、処理がcatch文に来ます。
このSAX Perserオブジェクトの作成が失敗する原因は、プログラムの実行環境にあります。(ほとんどの場合で実行環境に原因がある、と言えるでしょう)。

環境に原因があるため、実行中のプログラムは「その例外(問題)」を解決できません。
よって次の文で例外を通知して、処理の続行を諦めます。
throw new RuntimeException(“could not create SAX Parser”, cause);

参考:この例外を解決する方法

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

実行中のプログラムが、どこからかsaxParser.jarファイルを探し出して、適切なディレクトリにコピーする、という処理をすることは困難だと思います。
もしかしたらプログラムのインストール時、ハードディスクにsaxParser.jarファイルをコピーし忘れているかもしれないからです。

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

コンピューター
この記事をシェアする

グッズ・メモランダム