2012-06-25 25 views
3

當在Line 4處執行賦值語句,編譯器是否忽略new operator並保持foo變量爲空或其他事情發生以處理這個尷尬時刻時發生了什麼?在類本身內創建一個實例

 

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"); 
    } 
} 
 
+2

我的猜測會發生什麼是.... OUT堆空間 –

+0

我沒有意識到的順序要緊。你有沒有試過這段代碼? – BlackVegetable

回答

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) 
+0

你是怎麼稱呼這個的,因爲沒有main() –