Re: [問題] 在建構子殺掉自己的問題

看板java作者時間19年前 (2007/03/20 21:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
100% stack overflow.... 你這是無窮的間接遞迴(Recursive).... ※ 引述《montreal.bbs@ptt.cc (╮(╯3╰)╭)》之銘言: : 大家好! : 當我在建構子想要殺掉自己的時候,遇到一個奇怪的問題 : 下面程式描述一個class "Tester" 在建構子中新增另一個class AnotherClass : 而AnotherClass則在建構子中呼叫母類別的killAnotherClass()殺掉自己 : public class Tester { : AnotherClass aClass = null; : public Tester() { : aClass = new AnotherClass(this); : if(aClass == null) : System.out.println("aClass == null"); : else : System.out.println("aClass != null"); : } : public void killAnotherClass() { : aClass = null; : } : class AnotherClass { : AnotherClass(Tester parent) { : parent.killAnotherClass(); : } : } : public static void main(String[] argv) { : new Tester(); : } : } : 奇怪的是,最後程式印出 aClass != null : 難道killAnotherClass()失靈了嗎? : 接著為了測試killAnotherClass有確實的被執行,我把程式稍微改寫如下: : public class Tester { : AnotherClass aClass = null; : public Tester() { : aClass = new AnotherClass(this, "name a"); : if(aClass == null) : System.out.println("aClass == null"); : else : System.out.println(aClass.name); : } : public void killAnotherClass() { : aClass = new AnotherClass(this, "name b"); : } : class AnotherClass { : String name; : AnotherClass(Tester parent, String _name) { : name = _name; : parent.killAnotherClass(); : } : } : public static void main(String[] argv) { : new Tester(); : } : } : 結果竟然出現可怕的java.lang.StackOverflowError : 請問是哪裡出了問題? : 謝謝 :Q -- ╭──── Origin:<不良牛牧場> bbs.badcow.com.tw (210.200.247.200)─────╮ Welcome to SimFarm BBS -- From : [59.112.103.49] ◣◣◢ ◢◢不良牛免費撥接→電話:40586000→帳號:zoo→密碼:zoo ◣◣─╯
文章代碼(AID): #15_ziM00 (java)
討論串 (同標題文章)
文章代碼(AID): #15_ziM00 (java)