创建另一个类的对象时出现StackOverflowError

时间:2014-07-08 16:40:53

标签: java stack-overflow

我正在制作过去一个月左右的游戏,无论我做什么,我几乎都会得到StackOverflowError。这就是它在跟踪中所说的内容:

Exception in thread "main" java.lang.StackOverflowError
at retroscroller.Player.<init>
at retroscroller.Hole.<init>

错误发生在以下行: (球员班)

Hole hl = new Hole();

(在洞类中):

Player ch = new Player();

我是否收到错误,因为这两个类相互扩展并且都是超类?

4 个答案:

答案 0 :(得分:3)

  

我是否收到错误,因为这两个类相互扩展并且都是超类?

不,这在语言层面是不可能的。它不会编译。

但是,如果创建一个Player需要创建一个Hole,这需要创建一个Player ...那么你就遇到了问题。调试到构造函数,你应该看到发生了什么。 (熟悉调试器很重要......即使我在大多数情况下更喜欢单元测试而不是调试,有时你可以通过调试节省大量时间......)

考虑让其中一个构造函数将this传递给另一个,或者首先删除循环依赖关系。 (这两个对象真的需要彼此了解吗?)

答案 1 :(得分:0)

你的课程不会编译。如果你正在使用eclipse,它会抱怨说

Multiple markers at this line
- Cycle detected: a cycle exists in the type hierarchy between <class1> 
 and <class2>
- The hierarchy of the type <class1> is inconsistent

答案 2 :(得分:0)

不要在同一个类本身中创建对象。例如

class A{
A a =new A();
}
class Main extends {

}

以上代码将始终为您提供堆栈溢出异常,因为您无法全局实例化

答案 3 :(得分:-1)

在大多数情况下,这表示无限递归。检查你是否正在做A calling B calling A calling B calling A ...形式的事情,其中​​A和B是一些方法/构造函数。如果是这样,请重新构建代码以消除此问题。