我知道这是毫无意义的:我只是觉得这很有趣,我想更多地了解当您创建一个继承自身的类时会发生什么,从而导致堆栈溢出崩溃。令人惊奇的是,Java 允许您首先进行这样的构造。
我只是猜测,但是 JVM 是否将自身置于无限循环中,试图在实例化该类之前解析该类,或者它实际上是在无休止地实例化该类的多个副本?
我应该更具体一些;我正在使用内部类从封闭类派生。
public class Outside {
private int outsideValue;
public class Inside extends Outside {
private int insideValue;
public Inside(int val) {
insideValue = val;
}
}
public Outside() {
Inside o = new Inside(0);
}
}
public class Main {
public static void main(String args[]) {
Outside o = new Outside();
}
}
请记住,自从Inside
延伸Outside
,它有一个隐式调用super()
这是的构造函数Outside
(这又调用了构造函数Inside
),如此循环下去。
您发布的代码在概念上与以下程序没有什么不同:
class A {
B b = new B();
}
class B extends A {
}
public class Test {
public static void main(String[] args) {
new A(); // Create an A...
// ... which creates a B
// ... which extends A thus implicitly creates an A
// ... which creates a B
// ...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)