Der am häufigsten missbrauchte Begriff in der Programmierung ist "Variable"! Bevor überhaupt Aussagen über Variablen gemacht werden, soll erst einmal eine Definition dieses Begriffs erfolgen.
Definition: Eine Variable ist ein Behälter mit Daten des spezifizierten Typs.
Jede Variable benötigt einen Namen, der zur Identifizierung der abgelegten Daten fungiert. Es handelt sich also um einen identifier. Der Typ einer Variable legt fest was für Daten die Variable enthalten kann und damit auch welche Operationen auf diese Daten anwendbar sind. Die korrekte Bezeichnung dieses Parts lautet type. Um Typ und Name zusammenzufassen und dem Programm zur Verfügung zu stellen ist folgende minimale Anweisung erforderlich:
type identifier;
Es handelt sich um eine Deklaration Auch dieser Begriff soll gleich definiert werden; nicht um Diskussionen zu verhindern, sondern um ihren Bezug aus den hier hergeleiteten Sätzen zu separieren.
Definition: Eine declaration die Assoziation von identifier und Attribut, ohne die Notwendigkeit Speicherplatz zu reservieren. |
In der declaration kann außerdem der Schutzbereich festgelegt werden und durch entsprechende Positionierung im Quellcode ergibt sich noch ein Scope. Diese Gegebenheiten wurden im vorherigen Abschnitt detailliert besprochen.
Variablen, aber auch Methoden, besitzen eine genau definierte Sichtbarkeit nach Außen. Mit Außen ist alles außer dem Objekt selbst gemeint, also alle anderen Objekte, Klassen usw. Es existieren verschieden Stufen der Sichtbarkeit, die sich aufteilen in:
private
Nur sichtbar im
aktuellen Objekt. Nach außen hin völlig unsichtbar.
protected
Sichtbar
innerhalb des package in welcher die Klasse residiert.
Variablen besitzen, je nach Positionierung unterschiedliche Sichtbereiche. Deklarationen innerhalb von Methoden haben ein lokal scoping zu Folge, Deklarationen außerhalb von Methoden erzeugen hingegen member scoping. Je nach Ort der Deklaration werden Variablen denn auch in local und member variables unterteilt, mit erheblichen Unterschieden.
Diese Variablen werden nicht vom Compiler initialisiert. Ihr Inhalt ist praktisch zufälliger Natur, wird aber in kritischen Fällen als solcher vom Compiler erkannt und entsprechend behandelt (meist mit einer Fehlermeldung).
Werden vom Compiler initialisiert. Die Initialisierung übernimmt dabei die immer vorhandene Creator-Methode. Referenzierende Variablen (siehe Datentypen) erhalten eine Nullreferenz, primitive Typen das jeweils neutrale Element der Zahlenmenge (0). Im Zweifelsfall sollte eine Initialisierung also bereits bei der Deklaration stattfinden.
Java unterscheidet generell zwei Kategorien von data types. Es handelt sich dabei einmal um die in diesem Abschnitt besprochenen und um die referenzierenden. Letztere sind keinesfalls mit dem reservierten Speicherplatz zu verwechseln, sie dienen nur der Erreichbarkeit desselben. Objects, Arrays und Interfaces sind ausnahmslos der Kategorie reference zugehörig. Dieser Abschnitt widmet sich jedoch erst einmal den primitve Typen zu.
Eine tabellarische Auflistung zeigt die vorhanden data types. Die Spalten sind unterteilt in Bezeichnung, Beschreibung und belegtem Speicherplatz.
Bezeichnung |
Beschreibung |
Belegung |
---|---|---|
byte |
ganze Zahl (1 Byte) |
8-bit Zweierkomplement |
short |
ganze Zahl ( 2 Bytes) |
16-bit Zweierkomplement |
int |
ganze Zahl (4 Bytes) |
32-bit Zweierkomplement |
long |
ganze Zahl (8 Bytes) |
64-bit Zweierkomplement |
float |
Fliesskomma mit einfacher Genauigkeit |
32-bit IEEE 754 |
double |
Fliesskomma mit doppelter Genauigkeit |
64-bit IEEE 754 |
char |
Character (Buchstabe) |
16-bit Unicode Character |
boolean |
Boolescher Wert (true / false) |
wahr oder falsch |
Die Vermeidung des Begriffs
"Konstanten" ist mittlerweile so auffällig, dass es
wohl etwas Besonderes damit auf sich haben muss. Tatsächlich
besteht eine Besonderheit in Java bezüglich Konstanten: Es gibt
keine!
Konsequent, wie diese Sprache aufgebaut ist, entpuppen
sich Konstanten als Wertsynonyme. Ihr Aufbau unterscheidet sich in
keiner Weise von dem der Variablen. Nur eine Änderung des
Inhalts darf nicht erfolgen. Warum sollte dann eine weitere
Deklaration bereitgestellt werden, wenn doch allein das
Änderungsverbot den Anforderungen genügt. Ein Beispiel:
final int constNull=0;
Dem Programm wird eine Variable zur Verfügung gestellt, die den Wert 0 enthält und unmittelbar nach der Initialisierung nicht mehr änderbar ist.