我不知道如何修复堆栈溢出错误

时间:2012-11-21 02:53:40

标签: java stack-overflow

我收到了一个错误:

Exception in thread "main" java.lang.StackOverflowError
    at CreateCardDeck.<init>(CreateCardDeck.java:6)
    at CardStack.<init>(CardStack.java:7)
    at CreateCardDeck.<init>(CreateCardDeck.java:8)
    at CardStack.<init>(CardStack.java:7)
    at CreateCardDeck.<init>(CreateCardDeck.java:8)
    ...
    ...
    ...
    at CardStack.<init>(CardStack.java:7)
    at CreateCardDeck.<init>(CreateCardDeck.java:8)

但我不明白为什么会有错误。在我的代码中,我指定了卡的数量等。那么这里会出现什么问题呢?

public class CreateCardDeck
{
    int deckSize = 52;
    CardStack cardStack;

    CreateCardDeck()
    {
        cardStack = new CardStack(deckSize); --------------- problem here -----
    }
}

class CardStack extends CreateCardDeck
{
    public CardStack(int s) ------------ problem here --------------
    {
        maxSize = s;
        stackArray = new Card[maxSize];
        top = -1;
    }
......
}

2 个答案:

答案 0 :(得分:7)

通过让CardStack扩展CreateCardStack,您无意中使用了递归。不要在这里使用继承。除了导致StackOverflowError错误之外,它只是完全错误。 CardStack 是CreateCardStack的更专业版本,所以不应该扩展它。事实上,CardStack根本不了解CreateCardStack。

你的递归和SO错误:

您的CardStack构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,默认情况下,构造函数将调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数几乎无限制地直到内存用完为止。

答案 1 :(得分:1)

CardStack继承自CreateCardDeck。 CreateCardDeck的构造函数实例化一个CardStack,它会再次调用CreateCardDeck的构造函数,等等。

我建议您重新安排和重新设计代码。 CreateCardDeck看起来像一个方法的名称(因为它以动词开头)。也许你想要的实际上是CardStack中名为createCardDeck的 static 方法。