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

时间:2011-11-05 21:10:33

标签: java

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

class Animal {
    Animal object1 = new Animal();

    public static void main(String[] args) {     
        Animal obj = new Animal();
    }
}

这是与main Animal obj = new Animal();这一行略有不同的代码 方法评论出来。此代码显示没有运行时错误。

class Animal {
    Animal object1 = new Animal();

    public static void main(String[] args) {     
        // Animal obj = new Animal();
    }
}

这是如何引起的,我该如何解决?我正在使用命令提示符来运行此代码。

3 个答案:

答案 0 :(得分:15)

如果你有一个成员变量初始化为同一个类的实例,那么当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是CRE它也将有一个成员变量,它被初始化为同一个类的一个实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且当创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例,并且当该实例是在创建时,它还会有一个成员变量,它被初始化为同一个类的实例,并且在创建该实例时,它还将有一个成员变量,该变量被初始化为同一个类的实例...

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

答案 1 :(得分: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!
  }
}

或者:

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
  }
}

在任何一种情况下,您的数据结构中都会有“sentinel”或“leaf”节点,这些节点指向null值。

答案 2 :(得分:2)

这是一个堆栈溢出。

它与从同一函数调用函数类似,如下所示:

void func(){
  func();
}

它将重复,直到堆栈填满,然后程序将崩溃。

干杯。