Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


2.5.2

switch


Die switch-Anweisung dient dazu, verschiedene Anweisungsblöcke in Abhängigkeit vom Wert eines Ausdrucks auszuführen. Der Ausdruck wird Selektor genannt. Der Selektor muss den Typ int oder einen der dazu zuweisungskompatiblen Typen char, byte und short besitzen. Zuweisungskompatibel bedeutet, dass Werte dieser Typen ohne explizite Typumwandlung an int-Variablen zugewiesen werden können. Der Typ long ist für den Selektor nicht zulässig, gegebenenfalls muss eine Umwandlung nach int erfolgen .

Zur Verzweigung werden innerhalb der switch-Anweisung eine oder mehrere Marken gesetzt. Diese Marken beginnen mit dem Schlüselwort case, gefolgt von einer Konstante. Hierbei darf es keine zwei Marken geben, die mit derselben Konstante verbunden sind.

Für den Fall, dass der Wert des Selektors mit keiner der case-Konstanten übereinstimmt, kann eine Marke default eingerichtet werden. Die Marke default passt auf alle Werte.

Bei der Ausführung von switch wird geprüft, ob es eine zum Wert des Selektors passende Marke gibt. Ist das der Fall, so wird an die entsprechende Marke gesprungen, und alle restlichen Anweisungen der switch-Anweisung werden ausgeführt. Die Ausführung wird hierbei auch über die folgenden Marken hinweg fortgesetzt. Aus diesem Grund erzeugt die folgende switch-Anweisung
   int x = 4;
   switch(x) {
     case 3:
       System.out.println("Drei");
     case 4:
       System.out.println("Vier");
     case 5:
       System.out.println("Fünf");
     default:
       System.out.println("was anderes");
     }
die Ausgabe
  Vier
  Fünf
  was anderes
Meistens ist es aber der Fall, dass man nur die Anweisungen ab einer Marke bis zur nächsten Marke ausführen will. Hierzu muss man die Ausführung der switch-Anweisung explizit mit der Anweisung break beenden. Dies ist ein wesentlicher Unterschied zu der case-Anweisung in Pascal oder ADA, in der ausschließlich die Anweisungen ausgeführt werden, die zu einer bestimmten Fallbehandlung gehören und die danach beendet wird. Die obige switch-Anweisung muss daher folgendermaßen abgeändert werden, um das gewünschte Verhalten zu erzielen:
   switch(x) {
     case 3:
       System.out.println("Drei");
       break; 
     case 4:
       System.out.println("Vier");
       break; 
     case 5:
       System.out.println("Fünf");
       break; 
     default:
       System.out.println("was anderes");
     }
Es ist auch zulässig, mehrere Marken hintereinander anzugeben:
   switch(x) {     
     case 5:
     case 6:
       System.out.println("Fünf oder Sechs");
     ...
   }
Die Notwendigkeit, break explizit anzugeben, wenn eine Entweder-Oder-Fallbehandlung gewünscht wird, bringt zwar eine gewisse Fehlerträchtigkeit mit sich, andererseits lässt sich switch dadurch flexibler einsetzen. Außerdem[1.4] kann dem versehentlichen Fehlen von break-Anweisungen durch eine Prüfung des Compilers vorgebeugt werden. Seit Version 1.4 verfügt javac über die Option -Xswitchcheck, mit der Warnungen bei fehlenden break-Anweisungen innerhalb eines switch gegeben werden.

Die Fortsetzung der Ausführung über die nachfolgenden Marken hinweg macht es möglich, aufeinander aufbauende Fallbehandlungen zu realisieren. Im folgenden Beispiel soll die Variable x eine Zahl von 3 bis 5 zugewiesen bekommen, worauf die switch-Anweisung von dieser Zahl bis Fünf in Worten zählt. Zur Erläuterung sei angemerkt, dass der Operator += bei Strings dazu dient, einen String am Ende anzuhängen.
  int x;
  ...
  x = 4;
  String s = "Ich zähle:";
  switch(x) {
    case 3:
      s += " Drei";
    case 4:
      s += " Vier";
    case 5:
      s += " Fünf";
    default:
      s += ".";
    }
  System.out.println(s);
Für x=3 sorgt dieser switch für die Ausgabe
   Ich zähle: Drei Vier Fünf.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.