Hel*_*der 1 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)
Run Code Online (Sandbox Code Playgroud)
But I don't understand why there would be an error. In my code I have specified amount of cards etc. So what would be the problem here?
public class CreateCardDeck
{
int deckSize = 52;
CardStack cardStack;
CreateCardDeck()
{
cardStack = new CardStack(deckSize); --------------- problem here -----
}
}
Run Code Online (Sandbox Code Playgroud)
And
class CardStack extends CreateCardDeck
{
public CardStack(int s) ------------ problem here --------------
{
maxSize = s;
stackArray = new Card[maxSize];
top = -1;
}
......
}
Run Code Online (Sandbox Code Playgroud)
You're using recursion inadvertently by having CardStack extend CreateCardStack. Don't use inheritance here. Besides causing your StackOverflowError error, it's just plain wrong. CardStack is not a more specialized version of CreateCardStack and so should not extend it. In fact CardStack should have no knowledge about CreateCardStack at all.
Your recursion and SO error:
您的CardStack构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个构造函数将由其生成的CardStack对象.默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数默认调用super的构造函数,该构造函数创建另一个CardStack对象,其构造函数几乎无穷无尽,直到内存耗尽.