Skip to main content

So lassen sich aus Java Klassen Instanzen erstellen

Lass uns jetzt aus den Java Klassen heraus Objekte anlegen.

Im Einführungsbeispiel hast du bereits gelernt, wie du:

  • Instanzvariablen bzw. Attribute anlegst
  • Wie du aus einer normalen Java Klasse eine Programmstart Klasse machst

In diesem Artikel erfährst du:

  • Was Objekte bzw. Instanzen sind.
  • Wie sich Objekte zusammensetzen.
  • Wo und wie du Instanzen aus Java Klassen anlegen kannst.
  • Und was genau bei diesem Vorgang passiert.

Objekte bzw. Instanzen sind eine Zusammenfassung von Daten aus Java Klassen.

Stell es dir als Trichter vor.
Oben kommen die Instanzvariablen rein.
Diese werden dann zusammengefasst und es entsteht ein neuer Datentyp.

Java Klassen Datentypen erstellen

Objekte sind somit eine Zusammenfassung von Daten aus einer bestimmten Klasse.
Und den Bauplan für die ganze Zusammenstellung liefern die Java Klassen.

Am Beispiel:
In unserem Java Adventure haben wir bisher diverse Klassen angelegt.
In der Beispielklasse Held habe ich dir bereits gezeigt, wie du Instanzvariablen anlegen kannst.
Wir haben bisher drei Attriubute der Klasse angelegt:

  • den Namen
  • das Alter
  • die Größe

Java Klassen Instanzvariablen der Klasse Held

Wenn wir diesen Trichter jetzt einsetzen, um einen Helden zu erschaffen….
Java Klassen Instanzvariablen zusammenfassen

Dann werden die Instanzvariablen „heldAlter“, „heldGroesse“ und „heldName“ zusammengefasst.
Und es entsteht ein Objekt vom Datentypen eines Helden.
Dieser neue Datentyp fasst drei primitive Daten (String, int und float) zusammen.
Man spricht deshalb auch von einem komplexen Datentypen.

Und wenn du jetzt Objekte von diesem Datentypen anlegst, nennt man diese:

  • Instanzen der Klasse
  • Objekte der Klasse
  • Oder auch Member der Klasse

Bevor wir gleich Objekte aus der Heldenklasse anlegen, lass uns noch folgende Frage klären:

In welchen Java Klassen kannst du Objekte anlegen?

Instanzen kannst du in allen Klassen anlegen.

Zum Beispiel:
Kannst du Objekte der Klasse „Held“ in der Monsterklasse anlegen.
Du kannst sogar Objekte der Klasse Start in der Klasse „Raumschiffe“ anlegen.

Das Ganze ist also recht flexibel.

Die Frage sollte somit nicht lauten:
Wo kannst du Objekte anlegen.
Sondern – wo macht es Sinn?

Und deshalb ist die Frage – „Wann sollten im Programmablauf Objekte erzeugt werden?“ – die bessere.

Schauen wir uns die bisherigen Klassen einmal an:

Java Klassen Instanzvariablen der Klasse Held

Wo könntest du jetzt Helden erschaffen?
Klar bei den Monstern oder bei den Raumschiffen.
Möglich ist es – Aber es ergibt für unsere jetzige Konstellation wenig Sinn.

Die Helden sollen zum Programmstart erschaffen werden.

Und wo findet der Programmstart statt?
In der main-Methode.

Java Klassen Objekte erschaffen zum Programmstart

Alles was der main-Methode übergeben wird, wird beim Programmstart ausgeführt.
Und das heißt: jede Anweisung, jeder Methodenaufruf.

Also warum übergeben wir der main-Methode nicht ein paar Helden. 🙂
Doch wo genau?
Schau dir dieses Bild dazu an:

Java Klassen Querschnitt Startklasse

  • Wenn du die Heldobjekte auf Ebene der Klasse (roten Teil) anlegen würdest, gehören diese zur Klasse Start.
  • Die Startklasse hat nichts mit dem Programmstart zu tun.
    Es ist lediglich von uns gewollt, dass diese Klasse so heißt und diese Methode anbietet.
  • Das entscheidende Element für den Programmstart ist die main-Methode.
    Und diese Methode könntest du in jeder Klasse implementieren.
  • Die Objekte müssen also innerhalb des blauen Teils, dem Methodenrumpf, erstellt werden.

Ganz konkret würde dies dann so aussehen:

Java Klassen Start Rumpf der Main Methode

Jetzt haben wir das Was und das Wo geklärt….
Dann lass es uns endlich auch tun. 🙂

So kannst du Objekte aus Java Klassen erstellen.

Das wäre der Code zum Erstellen von zwei Java Objekten der Klasse „Held“:


public class Start {

	public static void main(String[] args) {
		Held heldEins = new Held();
		Held heldZwei = new Held();
	}
}

Schauen wir uns den Code genauer an.
Und zwar von rechts nach links.

Der rechte Teil ist der Konstruktoraufruf.

Java Klassen Instanz anlegen Konstruktoraufruf

Auf der rechten Seite der Gleichung siehst du die Anweisung: new Held().
Dies ist ein sogenannter Konstruktoraufruf, welcher ein Held-Objekt anlegt.
Java Klassen new Anweisung

Da dieser Konstruktor in meinem Code zweimal aufgerufen wird, entstehen zwei Objekte.
Und da in der Anweisung Held() und nicht Monster() steht, werden Objekte der Heldenklasse erstellt.

Falls du aus allen anderen Java Klassen ebenfalls Instanzen erstellen möchtest, musst du den hinteren Teil des Codes ersetzen.

  • new Held() – erschafft einen Helden
  • new Monster ()- erschafft ein Objekt aus der Klasse Monster
  • new Raumschiff()- erschafft ein Objekt aus der Klasse Raumschiff.
  • ….usw

Okay das haben wir geklärt.
Schauen wir uns den ersten Teil der Anweisung an.

Der linke Teil ist die Variable.

Java Klassen Referenzvariablen anlegen

Links der Gleichung siehst du die Variable, welche angelegt wird.
Diese Variablen heißen „heldEins“ und „heldZwei“.
Java Klassen Referenzvariablen

  • Die Variablen beinhalten ein Verweis auf dieses Objekt im Speicher.
  • Du kannst auch sagen: „Die Variablen zeigen auf die Objekte“.
    Und weil diese Variablen lediglich verweisen, nennt man diese auch Referenzvariablen.
  • Den Namen der Variablen kannst du frei wählen.

Weiterhin müssen alle Variablen einem gewissen Datentyp entsprechen.
In diesem Fall ist es der komplexe Datentyp „Held“.

Verbunden werden beide Seiten durch eine Zuweisung.

So jetzt haben wir die rechte und linke Seite des Codes geklärt.
Scheinbar verbunden werden beide Teile durch ein Gleichheitszeichen.
Es ist aber kein Gleichheitszeichen.
Es handelt sich hier auch nicht um eine Gleichung.

Java Klassen Zuweisung

Stattdessen spricht man von einer Zuweisung.
Und diesen Operator (=) nennt man Zuweisungsoperator.

Weil es wirklich wichtig ist….

Zusammenfassend nochmal den ganzen Code von links nach rechts:

Java Klassen Objekte anlegen

  • Zuerst der Datentyp „Held“.
    Dieser ist ein komplexer Datentyp, da dieser die Instanzvariablen der Klasse „Held“ zusammenfasst.
  • Dann folgen die Referenzvariablen „heldEins“ und „heldZwei“.
    Diese verweisen auf zwei Objekte im Speicher.
  • Dann folgt die Zuweisung in Form eines „Gleichheitszeichens“.
  • Und schließlich – Auf der rechten Seite des Codes befindet sich ein sogenannter Konstruktoraufruf.
    Durch diesen Konstruktoraufruf werden zwei „Held-Objekte“ im Speicher angelegt.

Ich möchte dir noch ganz kurz zeigen, dass du aus allen Klassen heraus Objekte anlegen kannst.
Unsere bisherigen Klassen aus dem Einführungsbeispiel sind:

Java Klassen Instanzvariablen der Klasse Held

Und hier der Code mit Kommentaren.


public class Start {

	public static void main(String[] args) {
		Held heldEins = new Held();//Helden Objekt 1
		Held heldZwei = new Held();//Helden Objekt 2
		Monster monsterEins = new Monster();//Monsterobjekt hat noch keine Attribute
		Start starterPacket = new Start();//Objekt der Klasse Start
		Monster heldNamen = new Monster();//Der Name der Variablen kann frei gewählt werden
		
		Monster monsterZwei = new Held();//Das geht nicht da Monster kein Held ist
	}
}

Du siehst:

  • Du kannst aus allen Klassen Objekte anlegen.
  • Der Name der Referenzvariablen ist völlig egal.
  • Einen Helden vom Datentyp Monster kannst du nicht anlegen.

Da ich bisher nur in der Heldenklasse, Instanzvariablen deklariert habe – kann ich zwar aus allen Klassen Objekte erstellen.
Diese haben aber keine Eigenschaften /Attribute.
Es ist somit zu diesem Zeitpunkt sinnlos diese Instanzen anzulegen.

Und somit zurück in die Heldenklasse. 🙂

Diese erstellten Objekte beinhalten dann alle Attribute aus den jeweiligen Java Klassen.

Ich habe einmal die Variablen der Heldenklasse durch die gelben Punkte dargestellt.

Java Klassen 2 Objekte

Du siehst ja, dass jedes Objekt jetzt eigene gelbe Punkte hat.
Das bedeutet, dass jedes Objekt dieser Java Klasse eigene Eigenschaften bzw. Werte beinhalten kann.
Somit kannst du zwei Objekte erstellen und diesen individuelle Werte für die Instanzvariablen zuweisen.

Und dann hast du ganz individuelle Heldenobjekte, welche sich klar in ihren Eigenschaften unterscheiden.

Wie du den Attributen Werte zuweist, zeige ich dir im nächsten Beitrag.

Zusammenfassung:

  • Aus den einzelnen Java Klassen lassen sich Objekte erstellen.
  • Diese Instanzen entsprechen dann einem neuen Datentypen.
    Der Datentyp ist eine Zusammenfassung der Instanzvariablen aus den entsprechenden Java Klassen.
  • Um so eine Instanz zu erstellen, muss eine Referenzvariable des neuen Datentypen angelegt werden.
    Diese speichert einen Verweis zum Objekt.
  • Ein neues Objekt kann nur über den Aufruf des Konstruktors der entsprechenden Java Klassen erstellt werden.

Ähnliche Beiträge

Hier sind ein paar richtig nette Features, die dich beim Java lernen unterstützen

Java lernen Eclipse

Was ist das Wichtigste beim Einstieg in ein neues Wissensgebiet? Nein, kein gutes Sachbuch oder ein besonders guter Lehrer. Es ist Spaß. Beim Java Lernen brauchst du Spaß. Es gibt Lehrer, welche ihren Stoff so vermitteln, dass Lernen Spaß bereitet. Aber die Grundvoraussetzung ist und bleibt der Spaß. Und nichts ist so spaßhemmend wie Langeweile […]

So nutzt du getter und setter Methoden bei der Java Programmierung

Java Keyword private

In diesem Artikel möchte ich dir zeigen, wie du Instanzvariablen innerhalb der Java Klasse schützt. Und den Zugriff nur noch indirekt über getter und setter Methoden anbietest. Stell dir vor. Du hast ein Programm zur Lagerverwaltung geschrieben. Dieses Programm dient Möbelhäusern dazu, ihre Bestände zu verwalten. Und das Programm erwartet vom Nutzer gewisse Eingaben zu […]

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

Über das kurze Leben einer lokalen Variablen

Java Variable lokal

Lass uns über die Lebensdauer einer lokalen Variablen sprechen. Warum ausgerechnet die Lebensdauer? Alle Java Variablen, unterscheiden sich in folgenden Punkten: wo diese deklariert werden können, wie du diese aufrufen kannst, welchen Bereich diese abdecken, und Ihre Lebensdauer Und eine lokale Java Variable hat eine relativ kurze Lebensdauer. Schauen wir uns zuerst Klassen- und Instanzvariablen […]

Java for Schleifen schachteln – So funktioniert es

Java For Schleifen schachteln

Diese Situation kennst du doch auch…. Du stehst an der Haltestelle und wartest auf den Bus. Dein Blick fällt auf die Uhr.   Oder du wartest an der Ecke auf deinen Freund oder Kollegen. Immer wieder schaust du auf deine Uhr.   Sie ist kaum noch wegzudenken. Die mobile Taschenuhr.   Lange Zeit wurde die […]

8 Java Datentypen, die du kennen solltest

Java Datentypen

Java Datentypen Ich gebe zu, ich hasse dieses Thema. Denn es ist eigentlich nichts weiter als graue Theorie. Dennoch müssen wir dieses Thema behandeln. Um schnell in das Thema zu kommen, stelle ich dir eine Übersicht aller primitiven Datentypen zur Verfügung. Wieso primitive? Es gibt außer den primitiven Datentypen, noch Referenztypen. Und diese Referenztypen sind […]

Java Strings landen im String Constant Pool

Java-Strings-Pool

Du kennst das. Es ist abends. Du sitzt gemütlich vor dem Fernseher. Das Smartphone bimmelt. Kein Anruf. Nein – Eine Nachricht. Du liest die Nachricht sofort und antwortest darauf. Minuten später bekommst du die nächste Nachricht. Und auch auf diese antwortest du. Im Laufe des Abends entsteht daraus eine nette kleine Konversation. Und eh du […]

Java Übung 19 – Zähle die Kommastellen

Java Übung Kommastellen Zählen

In dieser Java Übung möchte ich, dass du eine Methode zum Zählen von Kommastellen schreibst. Lege dazu eine Klasse „KommaZahl“ an. Diese Klasse enthält die statische Methode „zaehleKommaStellen“, welche eine Kommazahl als übergebenen Parameter erwartet.

Java Objekte leben auf dem Heap

Java-Objekte-Heap

Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere.   Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt.   Ja wieso braucht Java eigentlich zwei Speichersysteme?   Es ist ganz einfach. […]

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