Was bedeutet das Schlüsselwort "this" in Java?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

this ist die aktuelle Instanz eines Objekts.

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung
Mythxx103 
Fragesteller
 14.06.2021, 19:23

Ist die Instanz nicht schon das Objekt, oder das, was das Objekt erstellt?

0
Xearox  14.06.2021, 19:25
@Mythxx103

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.

1
Mythxx103 
Fragesteller
 14.06.2021, 19:26
@Xearox

Achso, jetzt habe ich es verstanden.

0
Mythxx103 
Fragesteller
 14.06.2021, 19:27
@Xearox

Also kann ich damit quasi meinem Objekt vom Typ Objekt Eigenschaften und Methoden geben?

0
hallojuhu  14.06.2021, 19:30
@Mythxx103

Nein, damit kannst du lediglich die Instanz deines Objektes ansprechen.

1
Xearox  14.06.2021, 19:45
@Mythxx103

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.

1

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).

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung

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;
  }
}