Bedeutung vom Schlüsselwort "this"

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Eine Klasse ist ein Bauplan von dem beliebig viele Objekte erzeugt werden können. Über die Datenfelder kann ein Objekt Referenzen auf andere Objekte halten.

this dient dazu dass sich ein Objekt in einer Methode selber ansprechen kann:

public void stackoverflow()
{
    this.stackoverflow();
}

In diesem Beispiel ist das this nicht unbedingt notwendig, da der Aufruf der Methode stackoverflow() eindeutig ist. Im folgenden Fall sieht das anders aus:

private int x;
public void stackoverflow(int x)
{
    this.x= x;
    this.stackoverflow();
}

Hier gibts einmal der Parameter x und das Feld x. Da this eine Referenz auf das Objekt ist addressiert this.x also das Feld x und das x ohne this ist der Parameter.

Wenn du mehrere Konstruktoren hast (z.B. einen mit Parameter und einen ohne) kannst du mit this() - indem du es wie ein Methodenaufruf verwendest - nutzen um die anderen Konstruktoren aufzurufen (das geht aber nur wenn das die erste Anweisung ist im Konstruktor):

private int x;
public Klasse() 
{
    this(0);
}
public Klasse(int x)
{
    this.x = x;
}

Da sich this auf das aktuelle Objekt bezieht existiert es nicht in statischen Methoden. Statische Methoden "gehören" der Klasse, nicht-statische den Objekten der Klasse.

Das kommt auf den Kontext an. Wenn du es z.B. in einer normalen Methode einsetzt, dann ist es die Referenz auf die Klasse an sich.

public class Punkt {
    private int x;
    private int y;
    public void setzePosition(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Dadurch, dass die Namen 'x' und 'y' gleich sind, kann der Compiler sie nicht genau zuordnen und würde so immer wieder den lokalen Parameter verwenden. Da man die Werte aber auf den privaten Attributen speichern will, kann man das Schlüsselwort 'this' verwenden.

Eine andere Funktion von 'this' ist, einen Konstruktor aufzurufen. Du hast z.B. einen Konstruktor, der alle wichtigen Werte als Parameter braucht, und einen anderen, in dem du schon gewisse Werte vordefiniert sind. Dann kannst du folgendes schreiben:

public class Punkt {
    private int _x;
    private int _y;
    public Punkt(int x, int y) {
        _x = x;
        _y = y;
    }
    public Punkt() {
        this(3, 7);
    }
}

So erzeugt nun der Konstruktor Punkt() immer ein Punktobjekt an der Stelle (3; 7). Man spart sich somit Code und muss den Konstruktor nicht mehrmals schreiben.

this ist eine Referenz eines Objektes auf sich selber.

Jap, ist der Zeiger auf das aktuelle Objekt