此代码在运行时显示错误:
class Animal {
Animal object1 = new Animal();
public static void main(String[] args) {
Animal obj = new Animal();
}
}
Run Code Online (Sandbox Code Playgroud)
这是与Animal obj = new Animal();main方法中注释掉的这一行略有不同的代码.此代码显示没有运行时错误.
class Animal {
Animal object1 = new Animal();
public static void main(String[] args) {
// Animal obj = new Animal();
}
}
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?我正在使用命令提示符来运行此代码.
Ern*_*ill 15
如果您有被初始化为同一类的实例成员变量,则创建实例时,也会有其被初始化为同一类的实例成员变量,并在创建该实例,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,并且当创建的情况下,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,并且当创建的情况下,它还将有一个成员变量,该变量初始化为同一个类的实例,并且在创建该实例时,它还将具有一个成员变量,该变量初始化为同一个类的实例,并且当该实例创建时 d,它还有一个成员变量,它被初始化为同一个类的一个实例,当创建该实例时,它还有一个成员变量,它被初始化为同一个类的一个实例,当该实例是创建,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,和当该实例是创建,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,和当该实例是在创建时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且在创建该实例时,它还将具有一个成员变量,该变量被初始化为同一个类的实例...
然后堆栈将溢出,它将停止.对象可以指向同一个类的另一个实例作为成员,但是在构造函数中创建该实例,或者在类的主体中初始化它,或者以递归方式创建对象直到你的堆栈溢出.通常,如果您需要这样的成员变量,那么您接受该对象作为构造函数参数.
简短回答无限递归.
如果你想要这样的递归数据结构,你可以做这样的事情:
public class A {
A object1;
public A(A member) {
this.object1 = member;
}
public static void main(String[] args) {
A item = new A(new A(null)); // note the base case/termination of the recursion!
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
public class B {
B object1;
public void init() {
object1 = new B();
}
public static void main(String[] args) {
B item = new B();
item.init();
// now item.object1 != null, but item.object1.object1 == null
}
}
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,您的数据结构中都会有"sentinel"或"leaf"节点,这些节点指向一个null值.