this-Keyword
Kurz: Eine Referenz auf das aktuelle Objekt innerhalb einer Instanzmethode oder eines Konstruktors — meist gebraucht, um ein Feld von einem gleichnamigen Parameter zu unterscheiden.
Genauer: Ohne this würde farbe = farbe; in einem Konstruktor mit Parameter farbe nichts bewirken (der Parameter würde sich selbst zuweisen). this.farbe = farbe; stellt klar: links das Objektfeld, rechts der Parameter. this() (mit Klammern) ruft zusätzlich einen anderen Konstruktor derselben Klasse auf.
Im Detail
class Person {
private String name;
private int alter;
Person(String name, int alter) {
this.name = name; // links: Feld, rechts: Parameter - ohne "this" wäre es doppeldeutig
this.alter = alter;
}
Person(String name) {
this(name, 0); // ruft den anderen Konstruktor derselben Klasse auf
}
Person nochAelter() {
this.alter++;
return this; // gibt das aktuelle Objekt zurück - ermöglicht Methodenverkettung
}
}
Person p = new Person("Anna").nochAelter().nochAelter();Der häufigste Einsatzzweck von this ist, ein Objektfeld von einem gleichnamigen Methoden-/Konstruktorparameter zu unterscheiden (“Shadowing”) — ohne this.name = name; würde die Zeile name = name; lediglich den Parameter sich selbst zuweisen, das Feld bliebe unverändert. Zwei weitere, seltenere Verwendungen: this(...) (mit Klammern, ohne Punkt) ruft innerhalb eines Konstruktors einen ANDEREN Konstruktor derselben Klasse auf, um Initialisierungscode nicht doppelt schreiben zu müssen (“Constructor Chaining”, muss ebenfalls erste Zeile sein). Und return this; am Ende einer Methode gibt das aktuelle Objekt zurück, was Methodenverkettung (“Fluent Interface”, wie im Beispiel oben) ermöglicht.
In einer static-Methode ist this nicht verfügbar, da statische Methoden zur Klasse selbst gehören und ohne konkretes Objekt aufgerufen werden können — es gibt in diesem Kontext schlicht kein “aktuelles Objekt”, auf das this zeigen könnte.
Siehe auch: Constructors, super-Keyword, Objects