实例化对象时出现StackOverFlow错误

时间:2012-08-27 03:38:31

标签: java static constructor stack-overflow

我正在审核认证考试,我尝试了以下代码:

class A {   
    B b = new B();
    static {
        System.out.println("A static.");
    }
    {
        System.out.println("A instance.");
    }
    A() {
        System.out.println("A constructor.");
    }
}
class B extends A {
    static {
        System.out.println("B static.");
    }
    {
        System.out.println("B instance.");
    }
    B() {
        System.out.println("B constructor.");
    }
}

public class Raaawrrr {
    public static void main(String args[]) {
        A a = new A();
    }
}

打印:

静止。 B静态。

然后导致堆栈溢出。我很难理解为什么。你能帮帮我吗?

2 个答案:

答案 0 :(得分:10)

实例化B. B恰好也是A类,因此再次实例化。哪个实例化B ...等等。

答案 1 :(得分:4)

您正在创建类B的对象,该对象是类AA的子类。请注意,在执行子类构造函数之前,必须 执行超类的构造函数。