在该类中声明一个类的实例

Sac*_*wal 7 java

此代码在运行时显示错误:

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,它还有一个成员变量,它被初始化为同一个类的一个实例,当创建该实例时,它还有一个成员变量,它被初始化为同一个类的一个实例,当该实例是创建,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,和当该实例是创建,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,和当该实例是在创建时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且在创建该实例时,它还将具有一个成员变量,该变量被初始化为同一个类的实例...

然后堆栈将溢出,它将停止.对象可以指向同一个类的另一个实例作为成员,但是在构造函数中创建该实例,或者在类的主体中初始化它,或者以递归方式创建对象直到你的堆栈溢出.通常,如果您需要这样的成员变量,那么您接受该对象作为构造函数参数.


use*_*396 5

简短回答无限递归.

如果你想要这样的递归数据结构,你可以做这样的事情:

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值.