Sollte ich "das" Schlüsselwort, wenn ich will, beziehen sich auf Instanz-Variablen innerhalb einer Methode?
Mein Lehrer sagt, dass, wenn ich versuche, Zugriff auf eine Instanz-variable innerhalb einer Methode, die ich sollte immer die this
Stichwort, sonst würde ich führen Sie eine doppelte Suche. Lokal suchen und dann eine Instanz Umfang der Suche.
Beispiel:
public class Test(){
int cont=0;
public void Method(){
System.out.println(cont);//Should I use This.cont instead?
}
}
Ich hoffe, er ist falsch, aber ich kann nicht finden, kein argument.
- "Doppelte Suche"??? Hat dein Lehrer erkennen, dass name-lookup erfolgt zur compile-Zeit?
- Die Verwendung von "dies" ist eine Erweiterung der ungarischen notation, wie ich meine. In anderen Worten, es sollte nicht vorgegeben werden, um an diesem Tag und Alter, wenn vernünftige Java-Entwickler code per IDE.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, nur verwenden
this
wenn Sie haben einen Namen Konflikts, wie zum Beispiel, wenn Sie einen parameter einer Methode den gleichen Namen wie eine Instanz-Feld, es ist die Einstellung.Es kann verwendet werden, zu anderen Zeiten, aber viele von uns fühlen, dass es einfach überflüssige Floskeln, um den code.
this
. Ansonsten jedesmal, wenn ein Leser sieht einen Verweis auf eine variable, die Sie Fragen, ob es eine lokale oder eine Instanz-variable.Du muss Verwendung
this
wenn erforderlich, da der name in Konflikt, aber es ist besser zu vermeiden diese ganz.Du kann Verwendung
this
wenn Sie es wünschen. Es ist rein eine Frage des Geschmacks.Du sollte Verwendung
this
in der Schule wenn der Lehrer es verlangt.this
es so sein. (Aber es gibt keine doppelte suchen auf.)this
ist ein alias oder einen Namen für die aktuelle Instanz in der Instanz. Es ist nützlich für die vereindeutigung von Instanz-Variablen von einheimischen (einschließlich der Parameter), aber es kann verwendet werden, um sich einfach auf member-Variablen und-Methoden aufrufen andere Konstruktor-überladungen, oder einfach, um beziehen sich auf die Instanz.Sehen Java - Wann 'dieses' Schlüsselwort
Auch Dies bezieht sich aktuelle Objekt. Wenn Sie Klasse haben, mit Variablen int A und eine Methode xyz-Teil der Klasse int, nur zu unterscheiden, die 'Eine' Sie sich beziehen, verwenden Sie diese.Ein. Dies ist ein Beispiel, Fall nur.
Also man kann sagen, dass
dieses Schlüsselwort kann verwendet werden, für die es (Es kann nicht verwendet werden, die mit statischen Methoden):
Ihre Lehrer richtig ist, dass es zu Doppel-suchen-compiler, wenn Sie nicht machen verwenden von
this
Schlüsselwort. Zunächst wird der compiler die Suche im lokalen Bereich und dann die Instanz Gültigkeitsbereich, wenn der compiler nicht finden kann, wird die variable im lokalen scope.Auch, während der compiler wandelt den code bytecode, der compiler Präfix die Instanz-Variablen mit
this
Schlüsselwort. Also, wenn Sie Sie selbst nutzenthis
Schlüsselwort, sind Sie tatsächlich die Verringerung der Belastung für den compiler, und der code kompiliert werden schneller.Da hat jeder die Beispiele unterscheiden der Namen, werde ich ein Beispiel geben, wenn mit
this
Hilfe:this
gilt nur für den Fall, wo ein parameter den gleichen Namen wie eine Klasse Eigenschaft.Ich gelegentlich verwenden
this
weil der Auto-Vervollständigung (macht das Leben leichter), aber ich reinige Sie danach.Erinnern, clarity ist der Schlüssel. In diesem Fall ist es offensichtlich, dass
cont
ist eine Klasse variable, aber wenn Sie schreiben eine enorme Klasse mit Haufen von Instanz-Variablen sind, sollten Sie mitthis
für Klarheit.Du auch nur müssen Verwendung
this
wenn es einen Namen-Kollision, z.B.In diesem Beispiel, in der Erwägung, dass num = num würden, verursachen einer Kollision, "dies" verhindern. Dies ist die einzige Zeit, es ist absolut notwendig, aber hier oft Klarheit ist eine höhere Priorität.
this
wenn autocompleting da Strg-Leertaste wird die Autovervollständigung ohnethis
.Anderen Ort, die
this
wird Häufig verwendet, für die Lesbarkeit ist, wenn eine innere Klasse object ist die Bezugnahme auf ein Feld, von dem enthaltenden Objekt.Den compiler nicht brauche, aber es macht die situation, wo zu suchen
foostring
mehr klar. Andere als diese (!), Ich nur voll qualifizieren Sie die Feldnamen in den Konstruktor, wo Sie versteckt sein könnten, die durch den parameter-Namen, wie viele andere Poster haben hier dargestellt.[Edit: Jetzt, wo ich darüber nachdenke, es gibt Orte, die der compiler braucht dies, z.B., wenn
Foohelper.toString()
nennen möchteFoo.toString()
.]