Ich lese ein Buch über Java. Es muss nur erklärt werden, wie Sie eine Klasse namens "Deck" erstellen, die ein Array von Karten als Instanzvariable (n) enthält. Hier ist der Code snippit:
%Vor% Warum wird der Befehl this.
nicht verwendet?
zum Beispiel warum ist der Code das nicht:
%Vor% this.
ist implizit.
Im Allgemeinen ist es eine Best Practice (mindestens I halte es für eine), this
nur zu verwenden, wenn es absolut notwendig ist. Wenn Sie beispielsweise eine lokale Variable namens cards
und eine Membervariable cards
haben, benötigen Sie this.cards
, um auf die Membervariable zu verweisen, da cards
sich auf die lokale Variable bezieht.
In solch einem Fall ist this
eine gute Idee (obwohl es vielleicht eine bessere Idee wäre, die Elementvariable umzubenennen).
In allen anderen Fällen, in denen ein implizites this
funktionieren kann, verwenden Sie es.
Weil es keine Zweideutigkeit gibt. Es gibt nur eine cards
Variable. this
würde benötigt, wenn es zwei gibt - eine davon ist eine Instanzvariable (Teil der Klasse, wie es derzeit ist), und die andere - ein Argument des Konstruktors.
Und übrigens, this
ist kein "Befehl". Es ist ein "Schlüsselwort".
Sie müssen nicht alle Zugriffe auf Mitglieder mit dem Schlüsselwort this
qualifizieren. Sie müssen es nur verwenden, wenn eine andere Variable die Member-Methode versteckt.
Und das ist kein Merkmal, das auf den Konstruktor beschränkt ist, sondern in allen Methoden verfügbar ist:
%Vor% Wenn Sie den Bezeichner cards
im Konstruktor verwenden, stellt der Compiler fest, dass das Feld (a.k.a.mitgliedsvariable) cards
im Geltungsbereich ist, und verwendet es. this.cards
wäre nur notwendig, um Mehrdeutigkeiten aufzulösen, zum Beispiel, wenn Sie auch eine lokale Variable oder einen Parameter namens cards
haben.
Es wäre sinnvoll, wenn Sie auch einen Parameter namens cards
haben. Dann würde this.cards
angeben, dass Sie genau das Feld cards
der Klasse meinen, nicht den Parameter.
Aber trotzdem ist es eine gute Übung, this.
in Fällen zu verwenden, wie in Ihrem Beispiel beschrieben.
This
ist impliziert.
Lassen Sie uns das ausarbeiten:
%Vor% In diesem Fall geben Sie ein Array von Karten mit demselben Namen wie das Kartenfeld des Objekts ein. This
bezieht sich auf die Datennummer Ihres Objekts, nicht auf den Parameter des Konstruktors.
Das Schlüsselwort "this" ist in diesem Fall überflüssig. Karten sind bereits im Klassenumfang definiert und der Compiler weiß, dass das Mitglied Teil dieser "Klasse" ist.
"Dies" ist impliziert. Es besteht keine Notwendigkeit, "das" zu verwenden. Normalerweise lege ich es dort hin, um den Code lesbar zu machen, aber es ist auch nicht nötig.
Ich versuche, Variablennamen so auszuwählen, dass das Schlüsselwort "this" nicht benötigt wird. Das heißt, wenn ich eine Eigenschaft namens "value" habe, übergehe ich einen Parameter namens val.
Eine gute Verwendung des Schlüsselworts "this" ist für das Überladen von Konstruktoren. Betrachten Sie folgendes (ich werde das verwenden, um den Unterschied zu demonstrieren):
%Vor%Wenn möglich, werde ich versuchen, den Namen der Eigenschaft und des Parameters zu vermeiden, um zu vermeiden, was Sie in Zeile 6 sehen. Die Verwendung des this-Schlüsselworts zum Aufrufen eines anderen Konstruktors ist jedoch eine gute Möglichkeit, Code-Duplizierung zu verhindern . Dies ist ein triviales Beispiel, aber wenn Sie anfangen, sich selbst mit Konstruktoren zu finden, die viele der gleichen Arbeit mit kleinen Unterschieden zwischen ihnen tun, ist es sehr praktisch.
Tags und Links java class constructor