chanting an air of joyous bliss

普段の生活で見逃しがちな面白いことを書いていく
そんなブログです

意図しない再起呼び出し

2005-09-16 17:31:57 | Java

Webアプリケーションを作成中、サーバーからの応答が無いという事象が発生した。
普通、サーバーからの応答が無い場合はプログラムのどこかで無限ループに陥っている可能性が高い。
ざっとソースを見た限り、for文もwhile文も無限ループになるような記述をしていない。

無限ループを起こしている箇所がどうしても思い当たらないため、デバックモードで実行しログをみてみた。
すると、jspでjavabeanを呼び出しているときに無限ループが発生していることがわかった。
無限ループを起こしているjavabeanのソースを見ていると
public String getHoge(){
return this.getHoge();
}
と記述している箇所があった。
どうやら、インスタンスフィールドをreturnするメソッドで、誤ってメソッド自身を呼び出す処理を書いてしまったらしい。
文法的には間違った書き方ではない
が、再帰の脱出条件が無いため結果的に
while(true){・・・・}
と同じ処理をしていることになる。

無限ループが起こると、ループ文を真っ先に疑うのは定石だろう。
だが、再帰処理でも無限ループが発生することがある。
意図して再帰処理を書いたなら、再帰処理が無限ループの原因だと思いつくかもしれない。
だが、意図しない再帰処理、
例えば、コード保管機能でインスタンスフィールドを選ぶつもりがインスタンスメソッドを選んでしまった。
場合はなかなか無限ループの原因が特定できないかもしれない。

無限ループが発生してなかなか原因がつかめない場合、"意図しない再帰呼び出し"も疑ってみてはどうだろうか?

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 前の記事へ | トップ | 需要曲線と供給曲線 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Java」カテゴリの最新記事