2012-05-18 4 views
6

Ich möchte wissen, was das bedeutet?java this (null)

public Settings() { 
    this(null); 
} 

Der obige Code ist der Konstruktor einer Klasse "Einstellungen". Was bedeutet das hier (Null)?

+0

Brauchen mehr Kontext. Ist das in einer Klassendefinition? –

+1

möglich Duplikat von [welche Art von Java-Konstruktoren sind das? Konstruktorverkettung?] (Http://stackoverflow.com/questions/9204560/what-type-of-java-constructors-are-these-constructor-chaining) –

+0

mögliche Duplikate von [Wie rufe ich einen Konstruktor aus einem anderen in Java ?] (http://stackoverflow.com/questions/285177/how-do-i-call-one-constructor-from-another-in-java) –

Antwort

12
public Settings() { 
    this(null); //this is calling the next constructor 
} 
public Settings(Object o) { 
// this one 
} 

Diese oft verwendet wird, die Standardwerte zu übergeben, so dass Sie entscheiden können, einen Konstruktor oder eine andere zu verwenden ..

public Person() { 
    this("Name"); 
} 
public Person(String name) { 
    this(name,20) 
} 
public Person(String name, int age) { 
    //... 
} 
+0

danke. Beispiel hat wirklich geholfen! –

+0

Gern geschehen (: – porfiriopartida

4

Es ist ein Konstruktor, der einen anderen Konstruktor in derselben Klasse aufruft.

Sie vermutlich etwas wie diese:

public class Settings { 
    public Settings() { 
     this(null); // <-- This is calling the constructor below 
    } 

    public Settings(object someValue) { 
    } 
} 

Oft dieses Muster verwendet, so dass Sie einen Konstruktor mit weniger Parametern bieten können (für einfache Bedienung durch den Anrufer), aber immer noch die Logik in einem enthaltenen halten place (der Konstruktor wird aufgerufen).

4

Es ruft einen anderen Konstruktor in der Settings-Klasse auf. Suchen Sie nach einem anderen Konstruktor, der einen einzelnen Parameter akzeptiert.

10

Es bedeutet, dass Sie einen überladenen Konstruktor aufrufen, der eine Object von einer Art nimmt, aber Sie übergeben kein Objekt, sondern eine Ebene null.

+0

Könnte das zu einem geerbten Konstruktor aufrufen, oder würde das anders aussehen ? – ametren

+2

Nein, es kann nicht @ametren, wenn Sie das tun wollen, müssen Sie es mit 'super (this)' –

+0

tun Sie können den übergeordneten Konstruktor mit super aufrufen, wenn Settings eine Klasse erweitert, die String als Argument empfängt, du kannst super ("somestring") verwenden – porfiriopartida

1

Es rufen Sie den Konstruktor Standard null als Argument übergeben ...

1

Versuchen Sie, überladene Konstruktor in Java zu lesen, und rufen Sie Konstruktor, der nur einen Parameter hat.

.

public Settings() { 
     this(null); 
    } 

    public Settings(Object obj){ 

} 
1

Dies wird Constructor Chaining in Java genannt. Bei diesem Aufruf rufen Sie tatsächlich den überlasteten Konstruktor Ihres Klassenobjekts auf. Beispiel

class Employee extends Person { 
    public Employee() { 
     this("2") //Invoke Employee's overloaded constructor"; 
    } 

    public Employee(String s) { 
     System.out.println(s); 
    } 
} 
0

Dies ruft im Grunde einen anderen parametrisierten Konstruktor in derselben Klasse wie jeder einzelne auf.

Eine Sache hier zu beachten, es wird einen Fehler erzeugen, wenn kein parametrisierter Konstruktor verfügbar ist.

Ich habe keine Verwendung der Übergabe von this() mit Null-Wert. Aber kann eine knifflige Frage sein, jemand zu fragen. :)