我有2个不同的类,它们都互相调用方法。由于某种原因,当我在该类中添加了一个已经有另一个类调用的对象的对象时,它给了我一个堆栈溢出错误。这是我要处理的内容:
ClassA:
public class ClassA {
ClassB objA = new ClassB();
}
ClassB:
public class ClassB {
ClassA objB = new ClassA();
}
尝试运行时,出现以下错误:
Exception in thread "main" java.lang.StackOverflowError
at package.ClassB.<init>(ClassB.java)
at package.ClassA.<init>(ClassA.java:26)
at package.ClassB.<init>(ClassB.java:17)
第26行和第17行是创建对象的位置(就像上面的示例一样)。我的错误示例的后2行至少重复了50次。
答案 0 :(得分:4)
创建ClassA
的实例时,将创建ClassB
的实例。
创建ClassB
的实例时,将创建ClassA
的实例。
因此,在创建这两个类中的任何一个的实例时,都会启动一系列无限的实例创建,从而导致StackOverflowError
。
如果您需要ClassA
来保存对ClassB
实例的引用,反之亦然,我建议您将一个引用传递给一个已创建的对象,而不是一个类在内部创建另一个实例的引用setter方法中的实例:
public class ClassA {
ClassB objA;
public setB (ClassB b) {
objA = b;
}
}
public class ClassB {
ClassA objB;
public setA (ClassA a) {
objB = a;
}
}
然后您以这种方式创建实例:
ClassA a = new ClassA();
ClassB b = new ClassB();
a.setB(b);
b.setA(a);