EMZETT.
Login

this-Keyword

Kurz: Eine Referenz auf das aktuelle Objekt selbst — wird innerhalb einer Methode oder eines Konstruktors genutzt, um explizit auf die eigenen Felder statt auf gleichnamige lokale Variablen zuzugreifen.

Genauer: Besonders wichtig ist this, wenn ein Parameter denselben Namen wie ein Feld der Klasse trägt (z. B. this.name = name;) — ohne das Schlüsselwort wäre nicht eindeutig, ob das Feld oder der Parameter gemeint ist. In manchen Sprachen wird this (oder ein Äquivalent wie self) auch genutzt, um einen anderen Konstruktor derselben Klasse aufzurufen.

Im Detail

class Person {
    String name;
 
    Person(String name) {
        this.name = name;   // this.name = das Feld, name = der Parameter
    }
}

Ohne this wäre name = name; im Konstruktor sinnlos — beide Seiten würden sich auf den PARAMETER beziehen (der näher liegende Name “gewinnt” in den meisten Sprachen, ein Prinzip namens “Shadowing”), und das Feld der Klasse bliebe unverändert. this.name macht dagegen eindeutig klar: “das Feld DIESES Objekts”, nicht der Parameter.

this wird über die einfache Namenskonflikt-Auflösung hinaus für mehrere weitere Zwecke genutzt:

  • Konstruktor-Verkettung: this(...) (statt super(...)) ruft einen ANDEREN Konstruktor derselben Klasse auf, um Initialisierungscode nicht doppelt zu schreiben.
  • Sich selbst als Parameter übergeben: Eine Methode kann this an eine andere Funktion übergeben, um ihr Zugriff auf das aktuelle Objekt zu geben (z. B. bei bestimmten Event-Listener- oder Observer-Mustern).
  • Method Chaining: Gibt eine Methode this selbst zurück (return this;), lassen sich mehrere Methodenaufrufe auf demselben Objekt aneinanderreihen (objekt.setzeA(1).setzeB(2).setzeC(3)), was einen flüssig lesbaren, “fluent” Programmierstil ermöglicht.

Ein wichtiger konzeptioneller Punkt: this existiert nur innerhalb von NICHT-statischen Methoden und Konstruktoren, weil es sich auf ein konkretes Objekt bezieht — statische Methoden gehören zur Klasse selbst, nicht zu einer einzelnen Instanz, und haben deshalb kein “aktuelles Objekt”, auf das this verweisen könnte.

Siehe auch: Objects, Constructors, super-Keyword