java - 我不确定如何修复堆栈溢出错误

标签 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;
    }
......
}

最佳答案

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

你的递归和 SO 错误:

您的 CardStack 构造函数将默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该对象创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象构造函数将默认调用 super 的构造函数,该构造函数创建另一个 CardStack 对象,该对象的构造函数默认调用 super 的构造函数,该对象创建另一个 CardStack 对象,其构造函数.....几乎无穷无尽,直到内存耗尽。

关于java - 我不确定如何修复堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485633/

相关文章:

java - 如何使 SWT Composite 可供选择?

c# - 追踪 Windows 服务中的 stackoverflow 错误

c++ - 快速排序导致计算器溢出?

maven程序集抛出stackoverflowerror

python - python可以抛出 "stack overflow"错误吗?

java - 再次检查一个列表中的所有内容,导致堆栈溢出

java - 在 JSP 或 Java(后端)上哪里可以更好地使用带条件的逻辑?

Java:在发送之前显示 HttpURLConnection 的请求

java - 无法在 RecyclerView 中显示项目

java - 按子列表的值对 LIst 列表进行排序