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

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

Zwei smarte Möglichkeiten eine Java Zufallszahl zu erzeugen

Java Zufallszahl

Java Zufallszahl – Wieso? In der Java Programmierung benötigst du immer wieder einmal Zufallszahlen. Du möchtest deine Software mit Daten testen und dir keine Zahlen ausdenken. Du benötigst Stichproben, welche ein reales Verhalten simulieren. Du hast ein Spiel entworfen und die Akteure sollen mit zufälligen aber unterschiedlichen Größen, Rüstungsleveln usw. auftreten. Die Einsatzmöglichkeiten für Zufallszahlen […]

Polymorphie bringt Vorteile für Java Arrays

Java Polymorphie Arrays

Wenn Java Arrays, Schubladen oder Container sein sollen… Dann wäre der Gebrauch einer solchen Schublade ziemlich einseitig und festgefahren. Denn in jedes Array passen zwar mehrere Daten – aber immer nur vom gleichen Datentyp. Immer gleicher Datentyp? Also eine Schublade nur für Socken, Unterwäsche und der ganze andere Kram passt dann eben nicht hinein. Um […]

So kannst du mit dem StringTokenizer Java Strings zerlegen oder splitten

Java StringTokenizer Java Strings teilen zerlegen splitten

Java StringTokenizer – was ist das? Bevor ich diese Frage kläre, schiebe ich eine zweite Frage hinterher. Denn im Wort Tokenizer steckt das Wort Token. Also was ist ein Token? Hier die Definition zum Token: Ein Token ist eine bestimmte Aneinanderreihung von Zeichen. Man kann auch sagen, eine lexikalische Einheit. Das kann zum Beispiel eine […]

So kannst du Java Methoden überladen

Java Methoden überladen

Im Mittelalter war es üblich, dass Könige oder Adlige Briefe durch ein Siegel verschlossen. Das Siegel hatte die Aufgabe den Inhalt des Briefes vor dem gewaltsamen Öffnen zu schützen. Außerdem hatte das Siegel die Aufgabe einen Eigentumsnachweis sicher zu stellen. Und jeder, welcher das Siegel des Königs sah, wusste: „Das königliche Siegel – Oh ein […]

Der bedeutende Unterschied zwischen Klassenvariablen und Instanzvariablen

Java Klassenvariablen

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied? Instanzvariablen stehen einem Objekt zur Verfügung. […]

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…

So kannst du zweidimensionale Java Arrays anlegen und nutzen

Java Arrays zweidimensional

Eines der bedeutendsten Instrumente in der Mathematik ist das Koordinatensystem. Die gedankliche Grundlage dieses Werkzeuges lieferte der französische Naturwissenschaftler und Philosoph Rene Descartes. Man muss sich einmal verdeutlichen, was dies für die damalige Zeit bedeutete. Bisher wurden mathematische Probleme lediglich durch Berechnungen gelöst. Denke an geometrische Figuren, wie Dreiecke und Vierecke. Der Umfang wurde lediglich […]