2017-01-10 48 views
0

如果'構造函數'在創建對象時分配內存並初始化實例變量,那我們爲什麼要說Object o = new Object();? 爲什麼不只是Object o = Object();Java中'新'運算符的真正含義是什麼?

實際上新的操作員在做什麼?

+7

總之,'new'分配內存,構造函數設置它。 – Pshemo

+4

'x = Foo()'是一個方法調用。 'x = new Foo()'是一個構造函數調用。 'new'確實影響了代碼的理解。 – khelwood

+0

http://stackoverflow.com/q/7019754/982149 – Fildor

回答

5

構造函數只初始化預先存在的對象。區分構造函數和方法調用的方法是new關鍵字。例如您可以在類Object中使用名爲Object的方法,但這可能不會產生任何結果。當你有子類時,這更加令人困惑。

class A { 
    A() { } // constructor 
    static A A() { return new A(); } // method 
    static A B() { return new A(); } // method 
} 

class B extends A { 
    B() { } 
} 

A b = new B(); // creates a B 
A a = B.B(); // creates an A 

new關鍵字的目的在於清楚何時創建新對象。

順便說一句你可以有一個工廠方法,如你所建議的那樣返回一個新的對象,但是明確地說明它可能被認爲是更清楚它到底在做什麼。

-1

這樣做的目的是避免名稱衝突。

讓我們假設你有方法C,d和E A類,但你也有一個名爲d另一個類,你要創建的A.

實例如果有WASN「如果你想調用方法或創建一個新對象,那麼編譯器就不會有任何想法。

相關問題