Veränderbare Variablen in Java
Eine veränderbare Variable kann ähnlich wie eine final-Variable deklariert und verwendet werden. Der Unterschied zur Deklaration einer final-Variablen besteht nur darin, daß das Schlüsselwort »final« entfällt.
Alles bisher über final-Variablen Gesagte kann auf veränderbare Variablen übertragen werden kann (wenn in diesem Kapitel nichts anderes gesagt wird). Analog zu final-Variablen kann man auch bei veränderbaren Variablen Bezeichnungen wie veränderbare Blockvariable oder bilden, um zu betonen, daß sie zu einem Block gehören.
Unter einer Variablen verstehen wir eine etwas, das entweder eine final-Variable oder eine veränderbare Variable ist. Eine nicht-final-Variable ist eine Variable, die ohne »final« deklariert wurde, also eine veränderbare Variable.
final-Variablen nennen wir in diesem Kurs manchmal auch Konstanten, obwohl die JLS sie nicht so nennt.
- Der Begriff „Variable“
Variable
|
.----------------------'----------------------.
| |final-Variable, z. B. veränderbare Variable, z. B.
final int i = 2; int i = 2;- Deklaration einer Variablen [vereinfachtes Syntaxdiagramm]
Variablendeklaration
.----------------.
| |
| .-----. v .-----. .------------. .-. .----------.
---'--->( final )---'---.--->| Typ |---.--->| Bezeichner |---->( = )---->| Ausdruck |--->
'-----' | '-----' ^ '------------' '-' '----------'
| .---. | Variablenname Initialisierungsausdruck
'--->( var )---'
'---'Typ
.---.
---.---->( int )---->.--->
| '---' ^
| .------. |
'--->( long )---'
| '------' |
| .------. |
'--->( double )---'
| '------' |
| .------. |
'---->| Name |----'
'------'Name
.-----------------------.
| .------. .-. v .------------.
---'--->| Name |-->( . )---'--->| Bezeichner |--->
'------' '-' '------------'- Variablendeklarationsanweisung [Syntaxdiagramm]
Anweisung
.----------------------. .-.
--->| Variablendeklaration |--->( ; )--->
'----------------------' '-'- Variablendeklarationsanweisung [Beispiele]
int a = 2;
double x = 2.724;
java.lang.String text = "abc";- Block (Syntaxdiagramm)
Block
.-. .-.
---->( { )----.----------------------.---->( } )---->
'-' | | '-'
| .-----------. |
'----| Anweisung |<----'
'-----------'
Die bisherige »final-Variablendeklarationsanweisung« ist in der folgenden Liste der bisher behandelten Anweisungen nun in »Variablendeklarationsanweisung« enthalten.
- Anweisung
Anweisung
.--------------------------------------.
---.--->| Ausgabeanweisung |----.--->
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Aufrufanweisung |----'
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Block |----'
| '--------------------------------------' |
| .--------------------------------------. |
'--->| Variablendeklarationsanweisung |----'
'--------------------------------------'
Die Bedeutung veränderbarer Variablen
Veränderbare Variablen bieten gegenüber final-Variablen noch zusätzliche Möglichkeiten: sie stehen nicht für einen Wert, sondern für einen Speicherplatz, der einen Wert des Typs der Variablen aufnehmen kann. Dieser Wert kann sich während der Ausführung des Blocks der Variablen ändern. (Wir werden etwas später sehen, wie genau dies möglich ist.) Jedoch ist der Typ einer Variablen immer konstant, sowohl bei einer final-Variablen als auch bei einer veränderbaren Variablen.
Die Gültigkeitsbereich von Deklarationen veränderbarer Variablen
Im Gültigkeitsbereich ihrer Deklaration hat eine veränderbare Variable den durch ihre Deklaration festgelegten Namen und Typ, aber nicht unbedingt auch einen eventuell in der Deklaration festgelegten Wert.
Refaktor „final-Variable durch Variable ersetzen“
(Ein Refaktor ist eine Überarbeitung eines Programms, nach der es – etwas vereinfacht gesagt – sich wieder so verhält wie zuvor.)
Indikation Der Programmierer möchte die zusätzlichen Möglichkeiten einer Variablen nutzen.
Wir können ein Programm mit einer final-Variablendeklaration in ein gleichwertiges Programm mit einer Variablendeklaration ohne »final« umschreiben, indem wir einfach das Schlüsselwort »final« aus der Konstantendeklaration entfernen.
Das folgende Programm enthält eine Deklaration einer final-Variablen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int k = 22; java.lang.System.out.println( k ); }}java.lang.System.out
22
Das folgende gleichwertige Programm wurde durch Löschen des Schlüsselwortes »final« aus dem direkt voranstehenden Programm gewonnnen, es enthält nun eine Blockvariable und verhält sich wie zuvor.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ int k = 22; java.lang.System.out.println( k ); }}java.lang.System.out
22
Durch Rückgängigmachen dieses Refaktors gewinnt man einen weiteren Refaktor „Blockvariable durch final-Blockvariable ersetzen“.