実際に例外を使う場合のコーディング方法の例:
【throws節を使用する場合】FileNotFoundException例外が起きるかもしれないメソッドMethodB()と、これを呼び出すMethodA()を以下に示す。
public void MethodA( ){
try {
methodB( );
} catch(FileNotFoundException e) {
System.err.println(e.getMessage( ));
} finally {
System.out.println("MethodA finished");
}
}
public void MethodB() throws FileNotFoundException {
FileReader exFile = new FileReader("dataA.dat");
}
メソッドMethodB()を呼び出すと、dataA.datというファイルが存在しない場合、例外FileNotFoundExceptionが投げられる場合がある。
それをこのコード中(MethodB)で処理をしない場合に、自分のthrows節に同じ例外を書いて、例外を伝搬していくかもしれないよ(つまり、マル投げするからよろしく)、と警告する。このように、throws節を書くだけで、自分のところで発生した例外を呼び出し元に伝搬させるのは、ひとつの正しい実装である。
さもなければ、ファイルリードする場面全てにおいて、FileNotFoundExceptionを受け止めて回避処理を書かなければならない。※実はC言語では全部書かなければならなかった。これは大変!
例:if(FP=fopen("dataA.dat",ro))==NULL) exit(1);などという実装
【try - catchを使用する場合】自分の責任を果たして、(具体的に)例外を受け止め処理するメソッドMethodC()を以下に示す。
public void MethodC(){ try{ MethodD(); }catch (ExceptionA m){ ... // 何かまずい事が起きたので反応しよう! } }
try-catchは、「{…}で囲んだ範囲のコードを実行せよ。もし例外が投げられてきたら、catchハンドラの部分で処理しろ」という意味である。
tryの後には、必要なだけcatch節を書くことが可能。
catch内では、ブラケット()中にExceptionクラス名と引数名(返ってくるエラーメッセージ等)を指定する。
何種類かの例外を別々に処理したければ、それらのクラスを指定したcatchを別々に書くこと。
2003年10月4日 14:24 更新