Skip to main content

Nutze das Keyword this für deine Java Konstruktoren

Es ist gemein.

Wahrscheinlich hast den Beitrag zu den lokalen Variablen gelesen.
Vielleicht hast du auch den Artikeln zum Anlegen und Überladen von Java Konstruktoren gelesen.

Und wenn du die beschriebene Inhalte selbst ausprobiert hast……
Dann hast du dir wahrscheinlich sehr viele lokale Variablennamen für die Parameterliste ausdenken müssen.

Das Problem ist das Shadowing der lokalen Variablen.

Und so sieht das Problem aus.


public class ThisReferenz {
int nummer;//Instanzvariable nummer wird deklariert
public ThisReferenz(int dieNummer) { // Konstruktor erwartet eine Zahl
nummer = dieNummer;// der Wert der lokalen Variable wird der Instanzvariablen zugewiesen
}
public static void main(String[] args) {
ThisReferenz ersteReferenz = new ThisReferenz(22); // Objekt wird erzeugt
System.out.println(ersteReferenz.nummer);// Konsolenausgabe zur Objektvariable
}
}

Die Zuweisung des Konstruktors bezieht sich nicht auf die äußere Instanzvariable.
Diese wird automatisch durch die innere lokale Variable überschattet (Variable in der Parameterliste).

Dadurch bist du gezwungen dir immer neue Variablennamen für die Parameterlisten auszudenken, welchen eben nicht überschattet werden.

In diesem Fall musste ich die Variable „dieNummer“ einführen.
Dann musste ich den Wert dieser Variable nehmen.
Und dann diesen Wert der Instanzvariable zuweisen.

Also immer fleißig neue Variablenamen ausdenken und somit dem Shadowing zu entgehen.
Und das ist mühselig und vor allem auch irgendwie unnütz.

Hier die gute Nachricht.

Es geht einfacher.
Java stellt dir ein Keyword zur Verfügung.
Mit diesem Keyword kannst du deinen Instanzvariablen die Werte aus den Parameterlisten direkt zuweisen.

Dieses Keyword heißt this.

Was macht das?
Jede Objektmethode und jedem Konstruktor steht automatisch eine Referenz bzw. ein Verweis auf sich selbst zur Verfügung.

Und dieser Verweis wird in der Variable this gespeichert.

Und so geht’s.
Lege in den Parameterliste eine lokale Variable an.
Der Datentyp und auch der Name entsprechen der Instanzvariablen.
Zur Zeit findet das Shadowing noch statt.


public class ThisReferenz {
int nummer;//Instanzvariable nummer wird deklariert
public ThisReferenz(int nummer) { //lokale Variable entspricht der Instanzvariablen
nummer = nummer;//Shadowing
}
public static void main(String[] args) {
ThisReferenz ersteReferenz = new ThisReferenz(22); // Objekt wird erzeugt
System.out.println(ersteReferenz.nummer);// Konsolenausgabe zur Objektvariable
}
}

Im Konstruktorrumpf verweist du durch das Keyword this auf die Objektvariable.
Und machst dann die Zuweisung.

Und so sieht der Code dazu aus.

public class ThisReferenz {
 int nummer;
 public ThisReferenz(int nummer) { //gleicher Name wie Objektvariable
 this.nummer = nummer;//Zuweisung mit this
 }
 public static void main(String[] args) {
 ThisReferenz ersteReferenz = new ThisReferenz(22);
 System.out.println(ersteReferenz.nummer);
 }
}



Zusammenfassung:

  • Aufgrund des Überschattens der lokalen Variablen musst du dir für deine Java Konstruktoren – Parameter neue Namen ausdenken.
  • Dies ist sehr umständlich und unnütz.
  • Durch das Keyword this kannst du dies umgehen.
  • Dabei solltest du darauf achten, dass die this-Anweisung die erste Anweisung im Konstruktorrumpf ist.

Hat dir der Artikel gefallen?
Na dann hinterlasse mir doch jetzt einen Kommentar.


Ähnliche Beiträge

Java Exklusives Oder – So nutzt du den Xor Operator

Java exklusives oder

In diesem Beitrag möchte ich dir den Xor Operator von Java vorstellen. Dieser Operator wird auch als ausschließendes oder exklusives Oder bezeichnet. Ein Beispiel: Was wilst du heute zum Mittag essen: Fleisch oder Fisch? Auf diese Frage gibt es nur eine Antwort. Es ist entweder Fisch oder Fleisch. Niemals beides. Das Eine schließt das andere […]

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.

So erstellst du deine ersten Java Klassen mit Eclipse

Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum Schluss zeige ich dir noch, […]

Warum Java Kommentare immer ein Mittel der Kommunikation sind

Java Kommentare Kommunikation

Kennst Du die Bücherreihe „Miteinander reden“ von Schulz von Thun? Falls Du an der Uni warst oder bist, gehört dieses Buch zur Standardlektüre im Fach Schlüsselkompetenz. Denn ein Java Entwickler, welcher im Team arbeitet, muss klar und deutlich kommunizieren können. Und klar und deutlich heißt nicht, dass die Aussprache Deiner Worte verständlich sein soll. Nein […]

Java Übung 26 – Das erste kleine Java Spiel

Java Übung Zahlenraten

In dieser Java Übung geht es darum ein kleines Java-Spiel zu erstellen. Und zwar Zahlen raten. Was kannst du dir darunter vorstellen? Du gibst einen bestimmten Wertebereich an. Zum Beispiel 0 bis 100. Und das Java Programm erstellt eine Zufallszahl in diesem Bereich. Dann fordert dich das Programm auf, die Zahl zu raten. Du gibst […]

Java Übung 31: Speichere deine Würfe im Array

Java Übung Array Würfelspiel

In dieser Java Übung soll ein Würfelspiel simuliert werden. Lege eine Klasse namens, Würfelspiel an. Diese Klasse enthält eine statische Methode, namens würfeln(). Diese Methode erwartet einen Parameter vom Datentyp Integer, namens „anzahlWuerfe“. Diese Variable/Parameter repräsentiert die Anzahl der Würfe. Nachdem der Methode die Anzahl der Würfe übergeben wurde, soll die Methode Zufallszahlen zwischen 1 […]