2011-11-05 63 views
6

内的类的一个实例此代码显示错误在运行时:声明该类

class Animal { 
    Animal object1 = new Animal(); 

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

这是略有不同的代码与Animal obj = new Animal();这条线从主 方法注释。此代码显示没有运行时错误。

class Animal { 
    Animal object1 = new Animal(); 

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

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

+0

虽然这一点很明显,但为什么你忽略了这个问题的确切错误信息?在将来的问题中,请始终包含完整的错误/异常消息和堆栈跟踪,因为它们通常包含答案。然后可以通俗的说法很容易地翻译它。 – BalusC

+0

我的错! 看到这条线填补我的命令提示符:“在动物(Animal.java:2)” (这是当我执行后的代码,我得到了运行时间错误) –

回答

13

如果您有被初始化为同一类的实例成员变量,则创建实例时,也会有其被初始化为同一类的实例成员变量,并在该实例被创建,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,和当该实例它也会有一个成员变量被初始化为同一个类的一个实例,当这个实例被创建时,它也会有一个成员变量被初始化为同一个类的一个实例,当那个实例被创建,它也会有一个成员变量被初始化为同一个类的一个实例,并且当这个实例被创建时,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,并且当创建的情况下,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,并且当创建的情况下,它也将具有被初始化为同一类的一个实例的成员变量,并创建该实例时,它也将具有被初始化为同一类的一个实例的成员变量,并且当创建的情况下,它也会有一个成员变量被初始化为同一个类的一个实例,当这个实例被创建时,它也会有一个成员变量被初始化为同一个类的一个实例,并且当这个实例是crea泰德,它也将具有被初始化为同一类的一个实例的成员变量...

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

+0

我能得到类似的无穷递归计算器错误?在这种情况下它是在运行时还是编译时间? –

+0

@PranavNandan它发生在运行时,并且是的,堆栈溢出本质上是有限计算机试图进行无限递归的结果。无限递归试图创建一个无限大堆栈,但为堆栈保留的内存是有限的,所以最终你会用完。 –

2

这是一个堆栈溢出。

它类似于从相同的函数调用的函数,就像这样:

void func(){ 
    func(); 
} 

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

干杯。

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

在这两种情况下,你将有“定点”或“您的数据结构中的“叶”节点指向null值。