如何解决StackOverFlowError?

时间:2013-11-04 16:47:29

标签: java class exception package outer-join

我的内部和外部类文件: -

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 个答案:

答案 0 :(得分:2)

您的test方法会创建Inner并调用其display()方法,该方法会创建Outer并调用其test方法。代码中的任何内容都不会阻止它永远持续,直到调用足够的方法来填充堆栈空间并发生StackOverflowError

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

答案 1 :(得分: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);
}
}

}

答案 2 :(得分:0)

Outer.test调用Inner.display,调用Outer.test调用Inner.display,调用调用Inner.display的Outer.test ...

这一直持续到你的程序用完了堆栈空间。

答案 3 :(得分:0)

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

您的测试方法调用显示和显示方法调用testunconditionaly。

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

另见

Recursion