0

我的内部和外部类文件在这里:-

package com.demo;

public class Outer {
int outer_x=100;

void test(){
    Inner inner =new Inner();
    inner.display();
}
public class Inner {
void display(){
    Outer ob=new Outer();
    ob.test();

    System.out.println("display: outer_x= "+outer_x);
}
}

}

另一个主类访问外部类成员:-

package com.demo;

class InnerClassDemo{
    public static void main(String args[]){
        Outer outer=new Outer();
        outer.test();
    }
}

例外:-

Exception in thread "main" java.lang.StackOverflowError
    at com.demo.Outer.<init>(Outer.java:3)
    at com.demo.Outer$Inner.display(Outer.java:12)
    at com.demo.Outer.test(Outer.java:8)

如何解决这个问题,请给我任何想法?

4

4 回答 4

2

你的test方法创建一个Inner并调用它的display()方法,它创建一个Outer并调用它的test方法。您的代码中没有任何内容可以阻止这种情况永远持续下去,直到调用了足够的方法来填满堆栈空间并StackOverflowError发生 a 。

要么没有test电话display,要么没有display电话test

于 2013-11-04T16:50:44.863 回答
1

我从@rgettman 解决了这个问题,答案在这里修改了我的内部和外部类

package com.demo;
public class Outer {
int outer_x=100;

void test(){
    Inner inner =new Inner();
    inner.display();
}
public class Inner {
void display(){

    System.out.println("display: outer_x= "+outer_x);
}
}

}
于 2013-11-05T15:17:30.843 回答
0

Outer.test 调用 Inner.display 调用 Outer.test 调用 Inner.display 调用 Outer.test 调用 Inner.display ......

这种情况一直持续到您的程序用完堆栈空间为止。

于 2013-11-04T16:49:46.923 回答
0

你得到 StackOverFlowError,因为你的调用有一个无限的方法调用,它总是超出程序堆栈。

您的测试方法调用 display 和 display 方法调用 testunconditionaly。

为递归方法定义基本案例是基本要求,因此您应该定义一个基本案例,它将返回并停止递归方法调用。

也可以看看

递归

于 2013-11-04T16:52:22.567 回答