2017-01-10 3 views
0

Wenn der 'Konstruktor' Speicher reserviert und Instanzvariablen initialisiert, während wir Objekte erstellen, warum sollten wir dann Object o = new Object(); sagen? Warum nicht einfach Object o = Object();?Was ist eigentlich der Punkt des "neuen" Betreibers in Java?

Was macht eigentlich der neue Operator?

+7

Kurz gesagt, 'new' reserviert Speicher, Konstruktor richtet es ein. – Pshemo

+4

'x = Foo()' ist ein Methodenaufruf. 'x = new Foo()' ist ein Konstruktoraufruf. "neu" beeinflusst tatsächlich, wie der Code verstanden wird. – khelwood

+0

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

Antwort

5

Konstruktoren initialisieren nur vorhandene Objekte. Der Unterschied zwischen einem Konstruktor- und einem Methodenaufruf ist das Schlüsselwort new. z.B. Sie können eine Methode Object in der Klasse Object haben, aber dies kann nichts erstellen. Wenn Sie Unterklassen haben, ist dies noch verwirrender.

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 

Der Punkt des new Schlüsselwort ist es klar zu machen, wenn ein neues Objekt erstellt wird.

BTW Sie können eine Factory-Methode verwenden, die ein neues Objekt zurückgibt, wie Sie vorschlagen, aber es explizit zu machen, kann als klarer betrachtet werden, was es tatsächlich tut.

-1

Dies funktioniert so, um Namenskollisionen zu vermeiden.

Let ‚sagen Sie eine Klasse A mit den Methoden C, D und E, aber Sie haben auch eine andere Klasse mit dem Namen D, mit dem Sie eine Instanz in A.

erstellen möchten Wenn es wasn‘ Wenn etwas wie neu ist, hat der Compiler keine Idee, wenn Sie die Methode aufrufen oder ein neues Objekt erstellen möchten.

Verwandte Themen