如果'構造函數'在創建對象時分配內存並初始化實例變量,那我們爲什麼要說Object o = new Object();
? 爲什麼不只是Object o = Object();
?Java中'新'運算符的真正含義是什麼?
實際上新的操作員在做什麼?
如果'構造函數'在創建對象時分配內存並初始化實例變量,那我們爲什麼要說Object o = new Object();
? 爲什麼不只是Object o = Object();
?Java中'新'運算符的真正含義是什麼?
實際上新的操作員在做什麼?
構造函數只初始化預先存在的對象。區分構造函數和方法調用的方法是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
關鍵字的目的在於清楚何時創建新對象。
順便說一句你可以有一個工廠方法,如你所建議的那樣返回一個新的對象,但是明確地說明它可能被認爲是更清楚它到底在做什麼。
這樣做的目的是避免名稱衝突。
讓我們假設你有方法C,d和E A類,但你也有一個名爲d另一個類,你要創建的A.
實例如果有WASN「如果你想調用方法或創建一個新對象,那麼編譯器就不會有任何想法。
總之,'new'分配內存,構造函數設置它。 – Pshemo
'x = Foo()'是一個方法調用。 'x = new Foo()'是一個構造函數調用。 'new'確實影響了代碼的理解。 – khelwood
http://stackoverflow.com/q/7019754/982149 – Fildor