Bei komplexen Datentypen handelt es sich immer um Klassen. Ein häufig verwendeter komplexer Datentyp ist die Klasse String. Jede Klasse ist ein potentieler Datentyp. Unter der Voraussetzung, dass die Klasse Mitarbeiter existiert, kann zum Beispiel folgende Variable angestellter deklariert werden:
Mitarbeiter angestellter;
In der Variable wird nicht das Objekt Mitarbeiter selbst gespeichert; es wird nur referenziert. Der Verweis auf das Objekt kann entweder zugewiesen werden, oder es wird ein neues Objekt erzeugt.
// Zuweisung eines Objektes
Mitarbeiter angestellter = einMitarbeiter;
// Erzeugung eines Objektes
Mitarbeiter angestellter = new Mitarbeiter();
In der objektorientierten Programmierung lässt sich ein Programm durch das Zusammenspiel kooperierender Objekte beschreiben. Das Zusammenspiel entsteht unter anderem durch den Verweis von Variablen auf Objekte. Solch ein Verweis wird möglich, indem man ein Variable deklariert, die einen Datentyp erhält, der zum zu referenzierenden Objekt passt.
Anders als bei primitiven Datentypen kann eine "komplexe" Variable sich aus beliebig vielen Werten zusammensetzen und mehrere Methoden zur Verfügung stellen.
Die Deklaration komplexer Variablen unterscheidet sich nicht von Variablen mit primitiven Datentypen. Zuerst wird der Datentyp genannt und dann der Variablenname:
Mitarbeiter angestellter;
Da es sich bei komplexen Datentypen um Klassen handelt, muss die Klasse tatsächlich existieren. Entweder
die Klasse ist Bestandteil des Projektes oder
sie muss aus einer Bibliothek importiert werden.
Im Folgenden Beispiel wird als Datentyp für die Instanzvariable geburtstag die Klasse Date gewählt. Sie wurde nicht im Rahmen des Projektes entwickelt, steht aber in der Bibliothek java.util zur Verfügung. Die Variable geburtstag wurde moch nicht intialisiert. Somit ist der Wert (Zeiger) für geburtstag null. Sobald ein Objektreferenz zugewiesen wird stehen alle Methoden und Datenfelder, die in der Klasse Date definiert wurden, zur Verfügung (ein umfangreiche Dokumentation der Klasse Date ist auf deutsch unter http://dpunkt.de/java/Referenz/Das_Paket_java.util/16.html einsehbar).
import java.util.date;
public class Mitarbeiter{
Date geburstag;
....
}
Wie bei primitiven Datentypen kann Variablen mit komplexen Datentypen ein erster initialier Wert zu gewiesen werden. Bei komplexen Datentypen handelt es sich um einen Verweis auf ein gültiges Objekt. Wird eine komplexe Variable nicht initialisiert gibt es keinen Zeiger auf ein Objekt. Somit ist die Variable null.
Im folgenden Beispiel ist zu sehen, wie der Instanzvariablen datum ein neu erzeugtes Objekt der Klasse Date zugewiesen wird. Im Konstruktor des Beispiels werden Objektreferenzen für z.B. die Variable kunde per Zuweisung übergeben.
import java.util.*;
public class Termin
{
// Deklarationen von Instanzvariablen mit primitiven und komplexen Datentypen
Date datum = new Date();
Kunde kunde;
Mitarbeiter mitarbeiter;
double rechnungsbetrag, anzahl;
// Deklarationen von lokalen Variablen als Eingabeparameter mit primitiven und komplexen Datentypen
public Termin(Kunde kunde, Mitarbeiter mitarbeiter,String datum, double rechnungsbetrag){
this.kunde=kunde;
this.mitarbeiter=mitarbeiter;
this.datum=datum;
this.rechnungsbetrag = rechnungsbetrag;
}
....
}