昨日「javaの例外処理9(例外の再スロー) 」という記事を書いた。
ここで、再スローについて補足。
メソッドが深い階層で構成されたロジックがあったとする。
例えば、mogeMethod1()がmogeMethod2()を呼び出し、
mogeMethod2()がmogeMethod3()を呼び出し、
mogeMethod3()がmogeMethod4()を呼び出し
mogeMethod4()がmogeMethod5()を呼び出す。
と言うようなロジック。
ここで、mogeMethod5()で例外処理try-catchがあり、try節でNullPointerExceptionが発生した場合を考える。
また、mogeMethod5()のcatch節ではthrow宣言で例外の再スローをしている。
しかし、mogeMethod5()を呼び出すmogeMethod4()が例外処理try-catchをしているが、catch節で例外の再スローをしていない場合、どうなるか?
(mogeMethod1(),mogeMethod2(),mogeMethod3()でも例外の再スローが行なわれている)
mogeMethod4()では、例外処理が行なわれているため、その例外は消滅しその後の処理は通常通り実行されるようになる。
例外は無視されることになる。
こうなると最悪。
例外が発生しているのに、その例外が発生している事すらわかりづらくなって
プログラマも運用者もバグに気づかなくなる。
mogeMethod5()、mogeMethod4()のcatch節でログを吐き出していなかったときなんてもっと悲惨・・・
ほんと、ほんとね、頼むよ。。。
NullPointerExceptionは非チェック例外だけど、チェック例外の場合も一緒だね。