昨日「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は非チェック例外だけど、チェック例外の場合も一緒だね。