- 624 名前:606 mailto:sage [04/03/13 15:07]
- 606の問題について,自分なりに考えてみました。
JLSを少しばかり流し読みしたんですけど,それによると 「finallyブロック内で中途完了した場合は,スローされた例外は捨てられる」 とあります。中途完了とは私の思い付く限りでは,return文,またはthrow文が finallyブロック内で実行された時です。throw文の場合は,スローした例外を finallyブロック内でキャッチできなかった場合です。 で,プログラムの流れなんですけど, JLSをちょこちょこっと見ただけなのでが,「スローされた例外が捨てられる」 とは,実行時だと解釈できますよね。 でも実は,methodメソッドのthrows宣言がなくてもコンパイルエラーとはなり ませんでした。ということは,コンパイル時にfinallyが中途完了するという事 をチェックしている,という事でしょうか? 中途完了しないようにreturnを削 除してコンパイルを行った所,キャッチ,またはthrows宣言がない,とエラーが 出ます。 コンパイル時にチェックされているのなら初めから例外はスローされていない 可能性も何となく考えられなくもありませんが,詳細は分かりません。 何れにせよ,finallyが中途完了した場合は,それまでに例外がスローされて いたなら,その例外オブジェクトは無効になってしまう,ということです。 実務は未経験ですが,現場ではこのような知識も必要とされるのでしょうか?
|

|