366 Stimmen

Wann sollte ich "dies" in einer Klasse verwenden?

Ich weiß, dass this bezieht sich auf ein aktuelles Objekt. Aber ich weiß nicht, wann ich es wirklich brauchen werde. Gibt es zum Beispiel einen Unterschied, wenn ich x 代わりに this.x in einigen der Methoden? Kann sein x auf eine Variable verweisen wird, die für die betreffende Methode lokal ist? Ich meine eine Variable, die nur in dieser Methode zu sehen ist.

Was ist mit this.method() ? Kann ich es verwenden? Sollte ich es verwenden. Wenn ich nur method() wird sie dann nicht standardmäßig auf das aktuelle Objekt angewendet?

2voto

roottraveller Punkte 7134

Im Folgenden werden die Möglichkeiten zur Verwendung des Schlüsselworts "this" in Java beschrieben:

  1. Verwendung von this Schlüsselwort, um auf aktuelle Klasseninstanzvariablen zu verweisen
  2. Verwendung von this() um den Konstruktor der aktuellen Klasse aufzurufen
  3. Verwendung von this Schlüsselwort, um die aktuelle Klasseninstanz zurückzugeben
  4. Verwendung von this Schlüsselwort als Methodenparameter

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

1voto

giri Punkte 26033

Wenn es zwei Variablen gibt, eine Instanzvariable und eine lokale Variable mit demselben Namen, dann verwenden wir dies, um auf das aktuelle ausführende Objekt zu verweisen, um den Konflikt zwischen den Namen zu vermeiden.

1voto

nouman shah Punkte 11

this ist ein Verweis auf das aktuelle Objekt. Sie wird im Konstruktor verwendet, um zwischen der lokalen und der aktuellen Klassenvariablen zu unterscheiden, die denselben Namen haben. z.B.:

public class circle {
    int x;
    circle(int x){
        this.x =x;
        //class variable =local variable 
    }
} 

this kann auch verwendet werden, um einen Konstruktor von einem anderen Konstruktor aus aufzurufen. z.B.:

public class circle {
    int x;

    circle() { 
        this(1);
    }

    circle(int x) {
        this.x = x; 
    }
}

0voto

mip Punkte 7905

this hat keinen Einfluss auf den resultierenden Code - es ist ein Kompilierungszeit-Operator und der Code, der mit oder ohne ihn erzeugt wird, ist der gleiche. Wann Sie ihn verwenden müssen, hängt vom Kontext ab. Zum Beispiel müssen Sie ihn verwenden, wie Sie sagten, wenn Sie eine lokale Variable haben, die eine Klassenvariable überschattet, und Sie auf die Klassenvariable und nicht auf die lokale Variable verweisen wollen.

edit: mit "der resultierende Code wird derselbe sein" meine ich natürlich, wenn eine Variable im lokalen Bereich nicht diejenige verdeckt, die zur Klasse gehört. Also

class POJO {
   protected int i;

   public void modify() {
      i = 9;
   }

   public void thisModify() {
      this.i = 9;
   }
}

Der resultierende Code für beide Methoden ist derselbe. Der Unterschied besteht darin, dass eine Methode eine lokale Variable mit demselben Namen deklariert

  public void m() {
      int i;
      i = 9;  // i refers to variable in method's scope
      this.i = 9; // i refers to class variable
  }

0voto

Alija Punkte 321

In Bezug auf William Brendel Posten und dbconfessions Frage, betreffend Fall 2 . Hier ist ein Beispiel:

public class Window {

  private Window parent;

  public Window (Window parent) {
    this.parent = parent;
  }

  public void addSubWindow() {
    Window child = new Window(this);
    list.add(child);
  }

  public void printInfo() {
    if (parent == null) {
      System.out.println("root");
    } else {
      System.out.println("child");
    }
  }

}

Ich habe gesehen, dass dies beim Aufbau von Eltern-Kind-Beziehungen mit Objekten verwendet wird. Bitte beachten Sie jedoch, dass es der Kürze halber vereinfacht ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X