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

Bをインスタンス化します。BもタイプAであるため、再度インスタンス化されます。これはB...などをインスタンス化します。

于 2012-08-27T03:40:50.463 に答える
4

クラス内Bのサブクラスであるクラスのオブジェクトを作成しています。スーパークラスのコンストラクターは、サブクラスのコンストラクターを実行する前に実行する必要があることに注意してください。AA

于 2012-08-27T03:41:44.693 に答える