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 Duales Zahlensystem – Binäre Zahlen in Java umwandeln

Java Dual System

Das duale Zahlensystem hat viele Bezeichnungen. Oft wird auch es Dualsystem oder Binärsystem genannt. Es besteht aber immer aus 2 Zahlen. Man verwendet oft die Zahlen 0 und 1. Es können aber auch sämtliche anderen Zahlenpaare sein. Zum Beispiel 7 und 175 sind für sich genommen, auch ein normales Zahlenpaar und somit ein Dualsystem. Mit […]

Heap & Stack – Die Speicherverwaltung in Java

Java Speicher

Java nutzt eine interne Speicherverwaltung. Eigentlich sind es mehrere. Uns interessieren lediglich zwei. Da das Thema Speicherverwaltung recht umfangreich ist, habe ich dir im Folgenden einmal die wichtigsten Artikel zusammengestellt. Die zwei Speichersysteme von Java Java Methoden werden auf dem Stack gestapelt. Der Speicher auf dem Java Methoden zu Hause sind, nennt sich Stack Speicher. […]

Der Aufbau von Java Klassen

Java Klassen Aufbau

Jedes Java Programm besteht aus Java Klassen. Doch wie sind diese aufgebaut? Wie setzt sich die Struktur zusammen? Wo befinden sich Klassen hierarchisch? Was kommt in die Klassen rein und wie wird es integriert? Das sind die Fragen, welche ich in diesem Artikel beantworten werde. Doch bevor wir bei den Klassen ansetzen, müssen wir eine […]

Lassen wir Java rechnen – Die Rechenoperationen für Variablen

Java rechnen

Ich liebe Mathe. In der Biographie „Der Mann, der die Zahlen liebte“, stellt Paul Hoffmann das Mathematikgenie Paul Erdös vor. Erdös war eines der größten Genies des 20 Jahrhunderts. Er arbeitete mit zahlreichen Wissenschaftlern zusammen und verfasste durchschnittlich mehr Publikationen im Jahr, als andere Mathematiker im ganzen Leben. Da Erdös sich mit sehr vielen Theoremen […]

Java Polymorphie – besserer Code und mehr Möglichkeiten

Java Polymorphie Vorteile

Polymorphie ist das Herzstück jeder objektorientierten Sprache. Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen. Aber was bedeutet Polymorphie eigentlich? Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen. Es bedeutet Vielgestaltigkeit. Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen. Im Grunde genommen zielt die ganze Java Vererbung […]

Java Vererbung:
Die 3 Schablonen für deine Java Objekte

Java Vererbung Beispiel

Im letzten Beitrag habe ich dir das Java Vererbung Konzept an einem Beispiel vorgestellt. In dem Beispiel-Rollenspiel gab es Klassen zu Helden und Superhelden. Ich habe dir die Vererbungshierarchien theoretisch erläutert. Jetzt geht es ans Praktische. In diesen Beitrag lernst du: Wie du bestehende Java Klassen erweiterst Wie du Objekte aus den erweiterten Klassen erstellen […]

Von Java Klassen zum Java Programm – Der Programmstart

Java Klassen ausführen

In den letzten Beiträgen hast du gelernt, wie Java Klassen erstellt werden und aufgebaut sind. In diesem Beitrag geht es um den Programmstart. Ich will dir zeigen, was nötig ist, dass du ein Java Programm ausführen kannst. Und ich zeige dir außerdem, wie du eine Startklasse in einem x-beliebigen Javaprogramm anlegst. Wie auch schon zuvor, […]

So kannst du Werte aus zwei oder mehreren Java Arrays verrechnen.

Java Arrays verrechnen

Wie kann man Werte aus zwei oder mehreren Java Arrays miteinander verrechnen? Zum Beispiel: Du möchtest alle Werte des ersten Arrays mit allen Werten des zweiten Arrays addieren Oder du möchtest die Summe aus beiden Arrays wissen und erst dann diese miteinander addieren. Was erwartet dich in diesem Beitrag? Zuerst werde ich dir zeigen, wie […]

Java Übung 21 – Bestimme die Anzahl der Tage

Java Übung Tage

In dieser Java Übung möchte ich, dass du eine Methode schreibst, welche zwei Zahlen entgegennimmt. Und zwar soll die erste Zahl das Jahr sein. Die zweite Zahl soll eine Monatsangabe (1-12) repräsentieren. Was soll die Methode dann machen? Die Methode soll dir die Anzahl der Tage des jeweiligen Monats zurückgeben. Achte auf Schaltjahre.

Java Exceptions Handling – Fehler- und Ausnahmenbehandlung in Java

Java Exceptions Handling

Java Exceptions Handling umfasst den richtigen Umgang mit Ausnahmen und Fehlern. Wie geht das? Und braucht man so etwas wirklich? Vielleicht sagst du jetzt: „Brauch ich nicht. Ich mache niemals Fehler.“ Doch… Bei der Java Fehlerbehandlung geht es nicht ausschließlich nur um deine Programmierfehler. Es geht auch um falsche Nutzereingaben, Hardware- und Ablauffehler. Und deshalb […]