尝试在 superclass 中创建继承 class 的新对象时发生 StackOverflowError
StackOverflowError when try create new object of inherit class in superclass
我是 Java 的新手。任何人都可以向我解释为什么它显示 WhosebugError 吗?
public class MainClass {
static Start st = new Start();
public static void main(String[] args) {
st.start();
}
}
public class Start {
Generator objGenerator = new Generator();
void start() {
objGenerator.generator();
}
}
public class Generator extends Start {
void generator() {
//...
}
}
如果生成器class不是继承自class启动,一切正常,但为什么?
创建Generator
的实例时,会调用Start
的构造函数,因为Generators
extends
Start
。这称为构造函数链接。
但是,当您调用 start
的构造函数时,您还有一个变量调用 new Generator
...
你创建了一个 Generator
,它是一个 Start
,它创建了一个 Generator
,它是一个 Start
...并且它一直持续到你的 stack overflows
Generator
继承自 Start
class Generator extends Start
并且Start
在构造上创建Generator
:
Generator objGenerator = new Generator();
与下面的相同:
public class Start {
Generator objGenerator;
public Start() {
objGenerator = new Generator();
}
}
Start
具有运行 objGenerator = new Generator()
.
的构造函数
这会调用 Generator
的构造函数。
Generator
的构造函数做的第一件事是调用 super()
.
super()
是 Start
.
的默认构造函数
转到 1.
Whosebug错误的原因是对象的递归实例化没有终止。递归对象实例化如下
第一步:static Start st = new Start();
第二步:实例化Start对象,由于成员变量objGenerator的初始化,需要实例化Generator对象
Generator objGenerator = new Generator();
第三步:由于Generator是Start的子类,所以实例化Generator对象需要实例化Start对象,又回到第二步
因此实际上您处于第 2 步和第 3 步之间来回的无限循环中。达到堆栈限制时,将抛出 Whosebug 异常。
我是 Java 的新手。任何人都可以向我解释为什么它显示 WhosebugError 吗?
public class MainClass {
static Start st = new Start();
public static void main(String[] args) {
st.start();
}
}
public class Start {
Generator objGenerator = new Generator();
void start() {
objGenerator.generator();
}
}
public class Generator extends Start {
void generator() {
//...
}
}
如果生成器class不是继承自class启动,一切正常,但为什么?
创建Generator
的实例时,会调用Start
的构造函数,因为Generators
extends
Start
。这称为构造函数链接。
但是,当您调用 start
的构造函数时,您还有一个变量调用 new Generator
...
你创建了一个 Generator
,它是一个 Start
,它创建了一个 Generator
,它是一个 Start
...并且它一直持续到你的 stack overflows
Generator
继承自 Start
class Generator extends Start
并且Start
在构造上创建Generator
:
Generator objGenerator = new Generator();
与下面的相同:
public class Start {
Generator objGenerator;
public Start() {
objGenerator = new Generator();
}
}
Start
具有运行objGenerator = new Generator()
. 的构造函数
这会调用
Generator
的构造函数。Generator
的构造函数做的第一件事是调用super()
.super()
是Start
. 的默认构造函数
转到 1.
Whosebug错误的原因是对象的递归实例化没有终止。递归对象实例化如下
第一步:static Start st = new Start();
第二步:实例化Start对象,由于成员变量objGenerator的初始化,需要实例化Generator对象
Generator objGenerator = new Generator();
第三步:由于Generator是Start的子类,所以实例化Generator对象需要实例化Start对象,又回到第二步
因此实际上您处于第 2 步和第 3 步之间来回的无限循环中。达到堆栈限制时,将抛出 Whosebug 异常。