我的内部和外部类文件: -
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)
如何解决这个问题,请给我任何想法?
答案 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。
为递归方法定义基本案例是基本要求,因此您应该定义一个基本案例,它将返回并停止递归方法调用。
另见