Was bedeutet das Schlüsselwort "this" in Java?
Hi, ich habe da schon viel gegooglet, finde das aber zu kompliziert erklärt. Kann mir jemand erklären, was das bedeutet, vlt. anhand eines Beispiels ?
4 Antworten
this ist die aktuelle Instanz eines Objekts.
Mit Object obj = new Object(); erstellst du eine neue Instanz vom Typ Object.
In der Klasse Object kannst du dann mit this auf die aktuelle Instanz des Objects zugreifen.
Achso, jetzt habe ich es verstanden.
Also kann ich damit quasi meinem Objekt vom Typ Objekt Eigenschaften und Methoden geben?
Nein, damit kannst du lediglich die Instanz deines Objektes ansprechen.
Also, es gibt ja verschiedene "Arten" von Methoden.
Es gibt statische Methoden und Eigenschaften und nicht-statische. Mit this.method() kannst du auf die nicht-statischen Methoden zugreifen.
Ganz einfaches Beispiel:
public class Auto {
public static anzahl = 0;
public String farbe;
public String marke;
public int preis;
public Auto (String farbe, String marke, int preis) {
this.farbe = farbe;
this.marke = marke;
this.preis = preis;
anzahl++;
}
public void entferneAuto() {
anzahl--;
}
}
und jetzt noch ne Hauptklasse
public class Program {
public static void main(String[] args) {
Auto auto = new Auto("pink", "Elefanten Rollschuh", 30000);
System.out.println(Auto.anzahl);
}
}
Ergebnis von Anzahl wäre 1.
Anzahl ist eine statische Variable und kann jederzeit aufgerufen werden, egal ob ein Objekt erzeugt wurde oder nicht. Zugriff geht über den Namen des Objekts und dann die Variable.
Auf farbe, marke und preis kannst du nur zugreifen, wenn ein Objekt erzeugt wurde. Innerhalb der Autoklasse kannst du mit this auf die Objekte zugreifen.
Wie mein Vorredner bereits gesagt hatte, "this" ist die aktuelle Instanz eines Objektes. Ein Beispiel wäre zum Beispiel wenn du in einem Konstruktor die Parameter gleich nennst wie die Attribute der Klasse. Dann kannst du mit "this" differenzieren:
public class Test()
{
private int test;
public Test(int test)
{
this.test = test;
}
}
Das Schlüsselwort this verweist auf das Objekt, über welches die Methode aufgerufen wurde.
Beispiel:
class Car {
private float fuel = 1.0f;
public void drive() {
this.fuel = 0;
}
}
// main:
Car car = new Car();
car.drive();
Beim Aufruf von drive wird implizit auch eine Referenz auf car an die Methode übergeben, auf die dann mit dem Schlüsselwort this zugegriffen werden kann. So kann auch der Zustand des Objekts verändert werden, weil über this Zugriff auf die Eigenschaft fuel besteht.
Noch einmal zum Vergleich: Wenn es this nicht geben würde, müsste man stets so vorgehen:
public void drive(Car car) {
car.fuel = 0f;
}
// call in main:
car.drive(car);
Zuletzt noch ein Hinweis: Beachte, dass this immer nur im objektgebundenen Kontext existiert. Eine statische Methode kennt also kein this, da sie über die Klasse aufgerufen wird. Nicht über ein Objekt.
"this" bezieht sich auf die aktuelle Instanz.
Wenn du ein Objekt (z.B. "Auto") instanziierst, z.B. so:
Auto meinAuto = new Auto();
... kannst du im Quelltext der Auto-Klasse mittels "this" die Instanz, auf die aktuell zugegriffen wird, modifizieren (bspw. Attribute ändern bei Aufruf einer Funktion).
Ist die Instanz nicht schon das Objekt, oder das, was das Objekt erstellt?