我正在制作过去一个月左右的游戏,无论我做什么,我几乎都会得到StackOverflowError
。这就是它在跟踪中所说的内容:
Exception in thread "main" java.lang.StackOverflowError
at retroscroller.Player.<init>
at retroscroller.Hole.<init>
错误发生在以下行: (球员班)
Hole hl = new Hole();
(在洞类中):
Player ch = new Player();
我是否收到错误,因为这两个类相互扩展并且都是超类?
答案 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是一些方法/构造函数。如果是这样,请重新构建代码以消除此问题。