Variablendeklarationen
Mit Variablen lassen sich Daten speichern, die vom Programm gelesen und
geschrieben werden können.
Um Variablen zu nutzen, müssen sie deklariert werden.
Die Schreibweise einer Variablendeklaration ist immer die gleiche: Hinter dem
Typnamen folgt der Name der Variablen.
Sie ist eine Anweisung und wird daher mit einem Semikolon abgeschlossen.
Beispiel Deklariere ein paar Variablen:
int counter; // Zähler
double income; // Einkommen
char c; // Für ein Zeichen
boolean isDefined; // Ist was definiert?
Den Variablen kann gleich bei der Deklaration ein Wert zugewiesen werden.
Hinter einem Gleichheitszeichen steht der Wert.
Eine Zuweisung gilt nur für immer genau eine Variable.
Beispiel Variablendeklaration mit Wertinitialisierung:
int age = 33; // Alter
double bodyHeight = 183; // Körpergröße
boolean vegetarian = true; // Vegetarier?
Werden mehrere Variablen gleichen Typs bestimmt, so trennt sie ein Komma
Beispiel Deklaration mehrerer Variablen auf einen Schlag. x und y bleiben
uninitialisiert:
double x, y, bodyHeight = 183;
Beispiel zur Variablendeklaration, -initialisierung und -ausgabe
Schreiben wir ein einfaches Programm, das zwei Variablen deklariert und
zuweist.
Die Variablenbelegung erscheint anschließend auf dem Bildschirm.
Listing 2.4 FirstVariable.java
public class FirstVariable
{
public static void main( String[] args )
{
boolean hasVisitors;
hasVisitors = true;
int numberOfPersons = 102220;
System.out.print( "Sind Personen in der Disko? " );
System.out.println( hasVisitors );
System.out.println( "Wie viele? " + numberOfPersons );
}
}
Sichtbarkeit und Gültigkeitsbereich
In jedem Block und auch in jeder Klasse können Variablen deklariert werden.
Jede Variable hat einen Geltungsbereich (engl. scope), auch
Gültigkeitsbereich beziehungsweise Lebensdauer genannt.
Sie ist nur in dem Block »lebendig«, in dem sie deklariert wurde. In dem Block
ist die Variable lokal. Dazu ein Beispiel:
public static void main( String args[] )
{
int i;
{
int j; // j gilt nur in dem Block
j = 1;
}
// j = 2; // j gibt es hier nicht mehr!
}
static void foo()
{
int i, k; // i hat mit oberem i nichts zu tun
{
// int k; // Das würde nicht gehen!
}
}
Zu jeder Zeit können Blöcke aufgebaut werden. Außerhalb des Blocks sind
deklarierte Variablen nicht sichtbar. Nach Abschluss des inneren Blocks, der j
deklariert, ist ein Zugriff auf j nicht mehr möglich; auf i ist der Zugriff weiterhin
erlaubt.
Innerhalb eines Blocks können Variablennamen nicht genauso gewählt werden
wie Namen lokaler Variablen eines äußeren Blocks oder wie die Namen für die
Parameter einer Funktion.
Das zeigt zum Beispiel die Deklaration der Variablen k.
Obwohl andere Programmiersprachen das erlauben, haben sich die Java-
Sprachentwickler dagegen entschieden, um Fehlerquellen zu vermeiden.
Überläufe bei Ganzzahlen
Passt das Ergebnis einer Berechnung nicht in den Wertebereich einer Zahl, so
wird dieser Fehler nicht vom System angezeigt; weder der Compiler noch die
Laufzeitumgebung melden dieses Problem.
Mathematisch gilt a * a / a = a, also etwa zum Beispiel
100 000 * 100 000 / 100 000 = 100 000.
In Java ist das anders, da wir bei 100 000 * 100 000 einen Überlauf im int
haben.
System.out.println( 100000 * 100000 / 100000 ); // 14100
liefert daher 14100.
Wenn wir den Datentyp auf long erhöhen, indem wir hinter ein 100 000 ein L
setzen, sind wir bei dieser Multiplikation noch sicher, da ein long das Ergebnis
aufnehmen kann.
System.out.println( 100000L * 100000 / 100000 ); // 100000
Wissenschaftliche Notation bei Fließkommazahlen
Die wissenschaftliche Notation ist eine Erweiterung der Standardnotation. Es folgt
hinter den Nachkommastellen ein »E« (oder »e«) mit einem Exponenten zur
Basis 10. Der Exponent kann entweder positiv oder negativ sein, muss aber eine
Ganzzahl sein. Die Tabelle stellt drei Beispiele zusammen:
Standard Wissenschaftlich
123450.0 1.2345E5
123450.0 1.2345E+5
0.000012345 1.2345E-5
Der Datentyp float
Standardmäßig sind die Literale vom Typ double. Ein nachgestelltes »f« (oder
»F«) zeigt an, dass es sich um ein float handelt. Vorkommateil und Exponent
dürfen durch die Vorzeichen »+« oder »–« eingeleitet werden.
Beispiel Gültige Zuweisungen für Fließkommazahlen vom Typ double und float:
double pi = 3.1415, klein = .001, x = 3.00e+8;
float y = 3.00E+8F;
Escape-Sequenzen/Fluchtsymbole
Für spezielle Zeichen stehen Escape-Sequenzen [Nicht alle aus C stammenden
Escape-Sequenzen finden sich auch in Java wieder. Es gibt kein '\a' (Alert), '\v'
(vertikaler Tabulator), '\?' (Fragezeichen) und kein '\x', was eine hexadezimale
Zahl einleitet (dafür lässt sich in Java \uXXXX nutzen). ] zur Verfügung, die so
nicht direkt als Zeichen dargestellt werden können.
Tabelle 2.6 Escape-Sequenzen
Zeichen Bedeutung
\b Rückschritt (Backspace)
\n Zeilenschaltung (Newline)
\f Seitenumbruch (Formfeed)
\r Wagenrücklauf (Carriage return)
\t Horizontaler Tabulator
\" Doppeltes Anführungszeichen
\' Einfaches Anführungszeichen
\\ Backslash
Beispiel Zeichenvariablen mit Initialwerten und Sonderzeichen:
char a = 'a',
singlequote = '\'',
newline = '\n',
Die Fluchtsymbole sind für Zeichenketten die gleichen. Auch dort können
bestimmte Zeichen mit Escape-Sequenzen dargestellt werden.
String s = "Er fragte: \"Wer lispelt wie Katja Burkard?\"";