看板java
标 题Re: [问题] 在建构子杀掉自己的问题
发信站不良牛牧场 (Tue Mar 20 20:29:19 2007)
转信站ptt!ctu-reader!ctu-gate!news.nctu!news.ntu!news.au!zoonews.ee.ntu!SimF
100% stack overflow....
你这是无穷的间接递回(Recursive)....
※ 引述《[email protected] (╮(╯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》 ◣◣◢ ─╯