Variable
Eine Variable repräsentiert einen Bereich im Speicher des Rechners, um Zugang zu diesem Speicher zu erhalten und diesen manipulieren zu können.
Variablen werden in den meisten streng getypten Programmiersprachen mit einem Datentyp und einem Namen versehen.
Inhaltsverzeichnis
Variablen in Java
In Java gibt es zwei Formen von Variablen: Variablen mit primitivem Datentyp und Variablen mit Objektdatentyp.
Variablen mit primitivem Datentyp repräsentieren einen direkten Zugriff auf einen Speicherbereich der Größe des primitiven Datentyps. Diese Variablen werden als Parameter in einem Methodenaufruf ausschließlich über Call by Value übergeben. Das heißt, der Speicherbereich selbst wird nicht an den Methodenaufruf übergeben, sondern dessen Inhalt.
Variablen mit einem Objektdatentyp repräsentieren eine Referenz auf ein Objekt, also lediglich einen virtuellen Zeiger auf einen Speicherbereich. Wird eine Funktion mit einem Objekt als Parameter aufgerufen, wird entsprechend nur die Referenz auf das Objekt als Parameter übergeben. Das bedeutet wiederum, dass Änderungen an einem Objekt von jedem Ort im Programmcode Einfluss auf das Objekt selbst haben. Diese Funktionalität wird Call by Reference genannt.
Eine weitere Kategorisierung von Variablen findet anhand ihrer Verwendung statt:
- Variablen können als lokale Variable in einem Funktions-/Methodenaufruf verwendet werden.
- Variablen können als Attribut eines Objektes verwendet werden.
- Variablen können als statisches Klassenattribut verwendet werden.
Variablen müssen in Java vor ihrer Verwendung deklariert werden. Bevor der Wert einer Variablen verwendet werden kann, muss sie zudem durch eine Zuweisung initialisiert werden.
Deklaration
Durch die Deklaration einer Variablen wird der Bedarf an Speicher in einem Programm signalisiert und dieser reserviert. Um eine Variable zu deklarieren, muss zuerst der Typ angegeben werden. Danach wird die Variable benannt.
Typ Variablenname;
Beispiel
int number;
Dies deklariert eine Variable vom Typ int
mit dem Namen number
. Entsprechend werden 32 Bit Speicher reserviert. Diese stehen nun über den Namen der Variablen zur Verfügung und werden stets als eine vorzeichenbehaftete Ganzzahl interpretiert.
Initialisierung
Bevor man den Wert einer Variablen verwenden kann, muss sie zuerst irgendwo im Programm mit einem Wert initialisiert werden. Dies geschieht durch eine Zuweisung. Einer Variablen kann insbesondere auch bei der Deklaration ein Wert zugewiesen werden.
Typ Variablenname = Initialwert;
Variablenname = Initialwert;
Beispiele
double value = 5.0;
Dies deklariert eine Variable vom Typ double
mit dem Namen value
. Sie wird mit dem Wert 5.0
initialisiert.
int number; [...] number = 42;
Dies deklariert erneut eine Variable vom Typ int
mit dem Namen number
. Sie wird erst in der nächsten Zeile mit dem Wert 42
initialisiert. Zwischen Deklaration und Initialisierung darf beliebiger anderer Code ausgeführt werden, solange dieser die Variable number
dabei nicht verwendet.
Wird eine primitive Variable als Attribut verwendet, so wird sie bei Instanziierung des Objektes mit 0 initialisiert. Trifft dies auf eine Objektvariable zu, wird diese als null initialisiert. Dieses Verhalten kann man durch den Konstruktor oder durch Angabe eines Standardwertes bei der Deklaration als Attribut verändern.
Verwendung
Lokale Variable
Eine Variable wird lokal genannt, wenn sie innerhalb eines Methodenaufrufs deklariert wird. Dies gilt auch für die Parametervariablen einer Methode.
Beispiel
public static void main(String[] args){ int value = 3; int iterations = 5; for(int i = 0; i < iterations; i++){ value += value; } System.out.println(value); }
In diesem Beispiel sind die Variablen args
, value
, iterations
und i
lokale Variablen. Sie existieren ausschließlich im Aufruf von main
und können nur hier verändert oder verwendet werden.
Attributvariable
Eine Variable wird Attribut genannt, wenn sie innerhalb einer Klasse deklariert wird.
Beispiel
public class Cuboid { private double width; private double height; private double length; [...] public void setWidth(double w){ this.width = w; } [...] }
In diesem Beispiel sind die Variablen width
, height
und length
Attributvariablen. Die Variable w
ist hingegen eine lokale Variable der Methode setWidth
. Die Attributvariablen existieren für jede Objektinstanz der Klasse einmal und sind unabhängig von den Werten der Attributvariablen anderer Objekte der gleichen Klasse.
Attribute können auch einen Wert bei der Deklaration zugewiesen bekommen:
public class Sphere { private double radius = 1; [...] }
Die Attribute eines Objektes werden dann bei der Instanziierung mit diesem Wert instanziiert. Die Attribute haben ihren so definierten initialen Wert bereits vor dem Aufruf der Programmroutine des Konstruktors.
Statische Klassenvariable
Eine Variable wird Klassenvariable oder Klassenattribut genannt, wenn sie innerhalb einer Klasse statisch deklariert wird. Dies ist meistens bei Konstanten der Fall.
Beispiel
public class Sphere { public static final double PI = 3.1415; [...] }
Eine statische Klassenvariable wird für die Klasse angelegt und ist daher innerhalb der gesamten Klasse sichtbar. Ihr Wert wird nicht für jede Instanz der Klasse vermerkt, sondern für die Klasse selbst. Deshalb sind veränderbare, das heißt nicht als final deklarierte, Klassenvariablen ein häufiger Grund für unerwünschte Nebeneffekte und ungerne gesehen.
Zuweisung
Eine Zuweisung ist eine spezielle Form der Anweisung. Sie weist dem Speicher, der durch eine Variable repräsentiert wird, einen neuen Wert zu.
Syntaxdiagramm
Verwendung
Die Verwendung einer Zuweisung ist verhältnismäßig einfach:
Zuerst wird der Name der Variablen, der ein neuer Wert zugewiesen muss, notiert (identifier im Diagramm).
Es folgt dann die Angabe des Zuweisungsoperators =. Dieser kann ersetzt werden durch die Operatoren für direkte Addition, Subtraktion, Multiplikation, Division oder Modulo.
Hinter diesen Operator wird ein Ausdruck notiert, welcher den neuen Wert (oder bei Verwendung von Kurzoperatoren den zu addierenden/multipliziernden Wert) des Speicherbereiches der Variablen repräsentiert.
Beispiele
public void method(){ int value; value = 0; }
public void method(){ int value = 0; }
public void method(){ int value = 2; int amount = 3 * value; }
public void method(){ int value = 2; value = value + 3; }
Negativbeispiel
public void method(){ value = 0; }