2

我正在复习认证考试,并尝试了以下代码:

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 静态。

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

4

2 回答 2

10

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

于 2012-08-27T03:40:50.463 回答
4

您正在创建一个 class 的对象,它是in classB的子类。注意超类的构造函数必须子类构造函数执行之前执行。AA

于 2012-08-27T03:41:44.693 回答