Das magische Schlüsselwort in Java „this“
Für
den Anfang möchte ich ein das Schlüsselwort this und deren
Funktionen kurz zusammenfassen.
Bevor
wir uns Gedanken über das Schlüsselwort this machen, möchte ich
mit euch das new Operator kurz wiederholen. Wir werden nämlich bei
der Begriffserklärung für das Schlüsselbegriff this den new
Operator brauchen müssen. Dazu benötigen wir eine Klasse mit denen
wir unser Experiment beginnen werden. Die Klasse heißt
Kraftfahrzeug. Es ist der Klassiker unter Begriffserklärungen von
this.
public
class
Kraftfahrzeug
{
public
int
ps
= 0;
private
int
verbrauch
= 0;
private
int
geschwindigkeit
= 0;
}
Unsere
Klasse enthält zwei privaten Attribute verbrauch, Geschwindigkeit
und ein, was in der Praxis sehr sehr selten vorkommt, öffentliches
Attribut ps. Unser nächster Schritt wäre, die Klasse Kraftfahrzeug
mit Instanzen aufzurufen. Dies geht wie folgt:
Kraftfahrzeug
fahrzeug1
= new
Kraftfahrzeug();
Kraftfahrzeug
fahrzeug2
=
new
Kraftfahrzeug();
Der
new Operator sorgt dafür, dass Speicher für die erzeugenden Objekte
reserviert wird. Nach den beiden Anweisungen haben wir also zwei
Speicherbereiche, in denen wir jeweils Platz für die Kraftfahrzeug
Attribute ps, verbrauch und Geschwindigkeit haben.
System.out.println(fahrzeug1);
System.out.println(fahrzeug2);
Als
Ausgabe erhalten wir jedoch auf der Konsole folgendes:
Kraftfahrzeug@2a139a55
Kraftfahrzeug@15db9742
Als
ersten würden wir uns wie in der Grundschule die W-Fragen durch den
Kopf gehen lassen. Was ist passiert und wie ist es passiert.
Das
was wir hier sehen nennt man Referenz. Eine Referenz kann man sich
vorstellen wie eine Adresse, unter der wir den für ein Objekt
reservierten Speicherbereich finden.
ALSO
MERKE: WENN WIR OBJEKTE EINER VARIABLEN ZUWEISEN, DANN WEISEN WIR DER
VARIABLE NICHT DEN INHALT DES OBJEKTES ZU, SONDERN LEDIGLICH EINEN
VERWEIS AUF DIE POSITION IM SPEICHER, AN DER ES GESPEICHERT WURDE.
Schauen
wir uns zunächst ein Beispiel an:
Kraftfahrzeug
fahrzeug3
= fahrzeug1;
fahrzeug3.ps
= 120;
fahrzeug1.ps
= 160;
System.out.println(fahrzeug3.ps);
System.out.println(fahrzeug1.ps);
Womöglich
rechnet der eine oder andere mit der Ausgabe:
120
160
Jedoch
muss ich diejenigen enttäuschen. Wir werden tatsächlich die
folgende Ausgabe in der Konsole erhalten:
160
160
Nun
warum ist das passiert? Wo lagen wir Falsch?
Wir
haben, wie ihr das im Quelldatei
sehen könnt, für fahrzeug3 keine neue Instanz
mittels des new Operators erzeugt und somit auch keinen Speicher
reserviert sondern lediglich fahrzeug1 der Variablen fahrzeug3
zugewiesen. Also auf deutsch: Egal was wir für fahrzeug3 speichern
wir weisen am Ende fahrzeug3 zu fahrzeug1. Das bedeutet, dass wir
alle Werte für fahrzeug3 einsetzten können doch ihr Wert wird von
der fahrzeug1 immer überschrieben werden, weil wir für fahrzeug3
keine separaten Speicherplatz zur Verfügung gestellt haben. Deshalb
setzen wir zwar in der Zeile zwei, das ps Attribut auf 120, da wir in
der Zeile drei aber den gleichen Speicherbereich ansprechen, wird
dieser Wert sofort mit dem Wert 160 überschrieben.
Anwendungen
des Java Schlüsselwort this:
Das
Wort this wird in der Programmiersprache Java hauptsächlich beim
lösen von Namenskonflikten angewendet. Als erstes möchte ich
deshalb mit euch ein Beispiel durchgehen mit dem diese nicht
Funktioniert also in diesem Fall der Compiler Fehlermeldung liefern
würde.
public
void setGeschwindigkeit(int
geschwindigkeit) {
geschwindigkeit
= geschwindigkeit;
}
In
der zweiten Zeile gibt es aber noch ein Attribut mit der gleichen
Namen Geschwindigkeit. Nun was ist was? Wir haben zwei Variablen vom
Typ int jedoch sind diese unnötigerweise verglichen.
Falsch
in der zweiten Zeile befindet sich die Variable Geschwindigkeit
und das Attribut
Geschwindigkeit.
Welches ist aber was? Um dies zu unterscheiden, hilft uns das
Magische Wort this. Mit diesem Wort können wir nämlich
unterscheiden welches ein Attribut und welches eine Variable ist.
Richtig wäre also:
public
void setGeschwindigkeit(int
geschwindigkeit) {
this.geschwindigkeit
= geschwindigkeit;
}
Jetzt
wird der Wert des Übergabeparameters Geschwindigkeit
dem Attribut Geschwindigkeit
zugewiesen.
Das
war die Grobe Erläuterung des Befehls/Schlüsselwortes this. In den
nächsten Tagen werden wir ein Beispiel über das Schlüsselwort this
durchgehen.
Kommentare
Kommentar veröffentlichen