Variablen und Konstanten in Java
Der Begriff „Konstante“
Das, was in diesem Kurs bisher als „Konstante“ bezeichnet wurde, ist in der Sprache der Java -Sprachspezifikation eine final-Variable (4.12.4), dort wird der Begriff „Konstante“ in einem engeren Sinne verwendet als in diesem Skript.
Dennoch legt die Java -Sprachspezifikation fest, daß final-Variablen für Werte stehen, während Variablen ohne »final« für einen Speicherplatz stehen. Und in genau diesem Sinne verwendet auch dieser Kurs hier die Unterscheidung zwischen Konstanten und Variablen: Eine Konstante ist ein Name für einen Wert, während eine Variable ein Name für einen Speicherplatz ist.
Stilregeln
ℛ Stilregel Wenn der Wert eines bestimmten Namens nicht verändert werden braucht oder soll, dann sollte der Name als konstant (»final«) deklariert werden. Konstanten sollten gegenüber Variablen bevorzugt eingesetzt werden!
Begründung Programme mit Konstanten sind leichter verständlich, da man sich zu einem bestimmten Namen immer einen bestimmten festen Wert denken kann.
Programme mit Variablen sind schwieriger zu verstehen als Programme mit Konstanten, da man sich beim Lesen einer Verwendung eines Namens nicht darauf verlassen kann, daß dieser noch den Initialisierungswert beibehalten hat: Bei einer Variablen könnte der Wert irgendwann nach der Deklaration durch eine Zuweisung verändert worden sein. Deswegen sollten Variablen sollten nur verwendet werden, wenn ihre Veränderbarkeit unbedingt benötigt wird.
Variablen mit wechselnder Bedeutung
Das folgende Beispiel spielt in einem Land mit 11 % Mehrwertsteuer und soll den Preis einer Ware mit einem Wert von 120 berechnen.
Es bleibt bei diese Programm allerdings unklar, welche Bedeutung die Variable »preis« genau hat. Gibt sie nun den Warenwert ohne Mehrwertsteuer (netto) oder den Endpreis inklusive Mehrwertsteuer (brutto) an? Offensichtlich beides, aber nacheinander! Solche Variablen mit wechselnder Bedeutung sind schwer verständlich.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ double preis = 120;
preis = preis * 1.11;
java.lang.System.out.println( preis ); }}transcript
133.20
In dem folgenden Programm werden statt einer Variablen zwei Konstanten eingesetzt. Nun hat jeder Name einer verständliche Bedeutung!
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double netto = 120;
final double brutto = netto * 1.11;
java.lang.System.out.println( brutto ); }}transcript
133.20
Oft lassen sich Variablen durch Konstanten ersetzen.
- Zitat aus der JLS8, 4.12.4
- A constant variable is a final variable of primitive type or type String that is initialized with a constant expression (§15.28).
Zitate *
- “A variable that is declared final cannot be assigned to (unless it is definitely unassigned (§16 (Definite Assignment))), because when an access of such a final variable is used as an expression, the result is a value, not a variable, and so it cannot be used as the first operand of an assignment operator.”