Skip to main content

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu.
Diese bezeichnet man als Referenz oder als Verweis.
Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen.

Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂

Ich habe es ja schon einmal in einem früheren Beitrag erwähnt.
Java unterscheidet zwischen primitiven und komplexen Datentypen.
Und einer dieser komplexen Datentypen sind die einzelnen Java Objekte.

Warum sind diese komplex?
Naja bei einem primitiven Datentypen reservierst du ganz klar einen bestimmten Speicherplatz und eine Speichergröße.

Bei einem Java Objekt ist es so, dass du unzählige Instanzvariablen anlegen kannst.
Und jede Instanzvariable entspricht einem bestimmten Datentyp.
Und somit hat jede Instanzvariable seinen festen Speicherplatz.

Aber da ist noch mehr….

In diesem Beitrag möchte ich dir den Umgang mit Java Objekten etwas genauer vorstellen.

Ich möchte dir diesen Umgang mit Hilfe einer Metapher näher bringen, welche ich in dem großartigen Buch „Java Kopf bis Fuß“ gesehen habe.

Java Objekte besitzen eine Fernbedienung.

Du kennst das….

Du sitzt vor deinem Fernseher und zappst durch die Programme.
Du hältst also deine Fernbedingung in der Hand und schaltest um.

Somit hast du einen Zugriff auf deinen Fernseher, ohne diesen wirklich zu berühren.
Ist doch erst einmal eine coole Sache, oder?

Java-Objekte-Fernbedienung

Und genauso kannst du dir den Zugriff auf Java Objekte vorstellen.
Du berührst diese niemals. Du greifst auch nicht selbst auf diese Objekte zu.

Du bedienst lediglich eine Fernbedingung und steuerst die Objekte damit.
Und so ein Konzept nennt man in der Programmierung Referenzierung.

Und deshalb bezeichnet man Java Objekte auch als Referenzvariablen.
Objekte werden somit niemals direkt angesprochen, sondern lediglich über einen Verweis bzw. Referenz.
Oder wie ich es nenne – eine Fernbedienung. 🙂

Um diese Referenzen zu verdeutlichen, lass uns einmal ein paar Java Objekte anlegen.

Ich finde das Beispiel mit Fernseher und Fernbedienung ganz anschaulich.
Und deshalb bleibe ich beim Fernseher.

Ich habe dazu eine Klasse namens Fernseher angelegt.
Diese Java Klasse führt weiterhin eine main-Methode, um das Programm zu starten.
Und zum Programmstart werden jetzt Fernseher angelegt.

Und so sieht der Java Code dazu aus.


public class Fernseher {
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf ein Java Objekt vom Typ Fernseher
}
}

Um dies in einem Bild besser und übersichtlicher verdeutlichen zu können, nenne ich meine Referenzvariablen nur a, b, c usw.

Und so kannst du dir dies bildlich vorstellen.

Java Objekte Referenz

Die Fernbedienung a (Referenzvariable) verweist auf ein bestimmtes Fernseher-Java-Objekt.

Und jetzt kannst du verschiedene Java Objekte anlegen.


public class Fernseher {
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf das erste Java Objekt
Fernseher b = new Fernseher(); // Referenzvariable b verweist auf zweites Objekt
}
}

Ganz wichtig ist die Tatsache, dass du auf alle deine Java Objekten lediglich durch die Referenzvariablen zugreifst.

Ich sage es nochmal.
Du greifst niemals selbst auf das Objekt zu.
Du hast nur die Fernbedienung.

Und beim zweiten und allen zukünftigen Objekten kannst du dir den Zugriff so vorstellen.

Java-Objekte-Verweise

Somit greift die Referenzvariable a auf das erste Fernseherobjekt zu.
Und die Variable b stellt den Verweis zum zweiten Fernseherobjekt her.

Um dir zu zeigen, dass ich dir kein Mist erzähle….
Lass uns eine Instanzvariable einführen.

Ich halte es ganz einfach und nenne diese einfach mal „objektVariable“.
Und der Datentyp ist Integer.


public class Fernseher {
int objektVariable; //Instanzvariable steht beiden Objekten separat zur Verfügung
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf Objekt 1
Fernseher b = new Fernseher(); //Referenzvariable b verweist auf Objekt 2
}
}

So und jetzt schalten wir die Fernbedienung für beide Objekte einfach mal ein.
Und legen für jedes Java Objekt ein separaten Wert für die Instanzvariable an.

Java Objekte Variable

Und zwar geschieht dies durch den Punktoperator.
Durch diese Punktnotation hast du Zugriff auf beide Instanzvariablen.

Durch das Setzen des Punktes derefenzierst du.
Das heißt: Du hast jetzt den tatsächlichen Zugriff auf das Objekt.

Und dann kannst du für jedes Java Objekt einen separaten Wert zuweisen.
Und so geht’s.


public class Fernseher {
int objektVariable; //Instanzvariable steht beiden Objekten separat zur Verfügung
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf Objekt 1
Fernseher b = new Fernseher(); //Referenzvariable b verweist auf Objekt 2
 
a.objektVariable=1; //Zugriff auf Objekt 1
b.objektVariable=2; //Zugriff auf Objekt 2
 
 
}
}

Jetzt haben die Instanzvariablen zu jedem Java Objekt einen individuellen Wert.
Lass uns dies überprüfen.
Also lass uns die Werte der Instanzvariablen über die Bildschirmausgabe zurückgeben.

Und so sieht der Java Code dazu aus.


public class Fernseher {
int objektVariable; //Instanzvariable steht beiden Java Objekten zur Verfügung
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf Objekt 1
Fernseher b = new Fernseher(); //Referenzvariable b verweist auf Objekt 2
 
a.objektVariable=1; //Zugriff auf Objekt 1
b.objektVariable=2; //Zugriff auf Objekt 2
 
System.out.println(a.objektVariable); //Rückgabe des Wertes für Objekt 1
System.out.println(b.objektVariable); //Rückgabe des Wertes für Objekt 2
}
}

Klicke auf „Run“ und dir werden unterschiedliche Werte zurückgegeben.

Falls du das Einführungsbeispiel zur Java Programmierung vollzogen hast, ist all das nicht neu für dich.

Aber du kannst für ein und das selbe Objekt auch mehrere Referenzvariablen anlegen.

Lass uns eine zweite Fernbedienungen für ein Java Objekt anlegen

Bisher haben wir zu jeder Referenzvariablen immer ein Objekt angelegt.

Wir haben also immer durch das Keywort „new“ und den Konstruktoraufruf ein Objekt erschaffen.

Wenn du allerdings nur eine Referenz anlegst, kannst du auch auf ein bereits bestehendes Objekt verweisen.


public class Fernseher {
int objektVariable; //Instanzvariable steht beiden Objekten separat zur Verfügung
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf Objekt 1
Fernseher b = new Fernseher(); //Referenzvariable b verweist auf Objekt 2
Fernseher c = b; //Referenzvariable c verweist auf Objekt 2
}
}

Du besitzt nun drei Referenzvariablen und zwei Java Objekte.

Java Objekte Referenzen

Was passiert eigentlich,
wenn du jetzt den Wert der Instanzvariablen für Objekt 2 änderst?
Und wenn du dann den Wert der Instanzvariablen für b und c aufrufst und zurückgeben lässt?

Oder anders gesagt:
Du nutzt die Fernbedienung b und änderst den Wert der Instanzvariablen.
Und über Fernbedienung c lässt du dir den Wert zurückgeben.

Wird c dir den gleichen Wert zurückgeben oder nicht?

Na, was denkst du?
Lass uns einmal ausprobieren.
Hier ist der Java Code dazu:


public class Fernseher {
int objektVariable; //Instanzvariable steht beiden Objekten separat zur Verfügung
 
public static void main(String[] args) {
Fernseher a = new Fernseher(); //Referenzvariable a verweist auf Objekt 1
Fernseher b = new Fernseher(); //Referenzvariable b verweist auf Objekt 2
Fernseher c = b; //Referenzvariable c verweist auf Objekt 2
 
b.objektVariable=12; //Zuweisung des Wertes für Objekt 2 durch Fernbedienung b
System.out.println(c.objektVariable); //Rückgabe des Wertes für Objekt 2 durch Fernbedienung c
}
}

Und was kommt raus?
Na klar „12“.
B und c verweisen auf das selbe Objekt.

Wenn du einen Fernseher hast und zwei Fernbedienungen dazu.
Dann ist es egal mit welcher Fernbedienung du umschaltest.
Beide Fernbedienungen haben den gleichen Zugriff und liefern das gleiche Ergebnis.

Zusammenfassung:

  • Wenn du Java Objekte anlegst, legst du gleichzeitig immer eine Referenzvariable an.
  • Diese Referenzvariable stellt einen Verweis zum jeweiligen Objekt her.
  • Diese Referenzvariable stellt eine Art Fernbedienung zu deinem Objekt her.
    Erst durch die Punktnotation gehst du zu den Java Objekten hin und kannst diese ändern.

Na was sagst du – hat dir dieser Artikel gefallen?
Oder hast du Anmerkungen und Fragen?
Na dann – Nutze doch jetzt das Kommentarfeld unter diesem Beitrag.


Ähnliche Beiträge

Java Binärzahl in Dezimalzahl umwandeln – So geht’s.

Java-Binärzahl-umrechnen

Erinnerst du dich? In einer der letzten Beiträge haben wir uns die Zusammenhänge zwischen dem dualen und dem dezimalen Zahlensystem angeschaut. Aber wir haben noch keine Java Binärzahl in eine Dezimalzahl verwandelt. Zumindestens nicht praktisch…. Stattdessen…. Haben wir festgestellt, dass beide Zahlensysteme im Grunde genommen sehr ähnlich sind. Beim Dezimalsystem spielt die Zahl 10, als […]

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]

Nutze das Java Switch Case Statement für komplexe Verzweigungen

Java Switch case

Java switch case statement – was ist das? Wozu brauchst du das? Lass mich anders beginnen… 🙂 In einen meiner früheren Beiträge habe ich schon einmal über bedingte Anweisungen oder Zuweisungen geschrieben. Diese if und else Konstrukte funktionieren eigentlich ganz gut. Aber was ist, wenn du mehrere Parameter abfangen möchtest. Okay ein Beispiel…

3 Möglichkeiten um Vererbung von Java Klassen zu verhindern, zu verbieten oder ausschließen

Java Vererbung verhindern

Die ganze Java Vererbung für bestimmte Klassen ausschließen bzw. verhindern oder verbieten. Was soll das? Für bestimmte Java Klassen soll die Vererbung ausgeschlossen werden. Es soll also verhindert werden, dass Elternklassen – Kindklassen bekommen können. Klingt ein bisschen wie Verhütung, oder? Denn wie auch im echten Leben, können Kinder zu kleinen Tyrannen werden. Sie bedienen […]

Java lernen – 10 nützliche Tipps für Java Anfänger

Java Lernen Anfänger

Wenn du die Programmiersprache Java lernen möchtest, bist du hier prinzipiell erst einmal richtig. Und wenn du es wirklich ernst meinst und in die Java Programmierung einsteigen möchtest, solltest du auch meinen kostenlosen Java Kurs beanspruchen. Wenn du dabei bist, bekommst du: Eine Lektion pro Woche zu den Basics. Hier geht es um die ersten […]

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 […]

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 dein Java Programm mit der main Methode ausführen

Auf zum ersten Java Programm. Vielleicht fragst du dich jetzt gerade: Na, was haben wir denn bisher gemacht? War das etwa kein Java Programm? Wir haben bisher nur eine Klasse „Human“ für ein zuküntfiges Mensch-Objekt erstellt. Diesem Objekt haben wir eine Instanzvariable, namens size (Größe) zugeordnet. Und wir haben eine Instanzmethode, namens grow (wachsen) geschrieben. […]

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 […]

Java Übung: Alles beginnt mit Hello World

Java Übung Hello World

Alles beginnt mit „Hello World“. Sämtliche Java Bücher beginnen mit diesem ersten Beispiel. Auch die Java Übungen sollen mit diesem ersten Programm starten. Definiere eine Klasse „Hello World“. Implementiere die Main Methode. Die Main Methode soll bei Programmaufruf die Bildschirmanzeige „Hallo Welt“ zurückgeben. Die Lösung zur Java Übung „Hallo Welt“ public class HelloWorld{ public static […]