3

Line 4代入ステートメントが で実行されたときにnew operatorfooが起こっているのですか?


public class Foo {
 // creating an instance before its constructor has been invoked, suppose the "initializing"  
 // gets printed in constructor as a result of the next line, of course it will not print it
    private  Foo foo = new Foo();//Line 4

    public Foo() {
        System.out.println("initializing");
    }
}

4

1 に答える 1

4

ここでは、コンパイラは特別なことは何もしません。これが機能しないことを警告する可能性がありますが、それを判断するのは困難です。

StackOverflowError が発生します。

public class Foo {
    private  Foo foo = new Foo();//Line 4

    public Foo() {
        System.out.println("initializing");
    }

    public static void main(String... args) {
        Foo foo = new Foo();
    }
}

版画

Exception in thread "main" java.lang.StackOverflowError
    at Foo.<init>(Foo.java:9)
    at Foo.<init>(Foo.java:7)
    at Foo.<init>(Foo.java:7)
    .. many deleted ...
    at Foo.<init>(Foo.java:7)
    at Foo.<init>(Foo.java:7)
于 2012-06-25T15:13:00.097 に答える