• Home
  • |
  • Blog
  • |
  • Java Tutorial #8 – Die Java Switch Case Abfrage

Java Tutorial #8 – Die Java Switch Case Abfrage

Zuletzt aktualisiert: August 8, 2023

Heute wirst du in Java Switch Case Anweisungen kennenlernen. Dabei werden wir uns ansehen, was sogenannte Switch-Blöcke sind und wie du eine Switch Case Anweisung in deinen eigenen Programmen bauen und diese damit steuern kannst.

Sie sehen gerade einen Platzhalterinhalt von Youtube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen

Inhaltsverzeichnis

1. Was sind Switch-Blöcke?

Beginnen wir also direkt mit den Switch-Blöcken.

Switch-Blöcke sind eine weitere Kontrollstruktur zum Steuern des Programmablaufs.

Im vergangenen Beitrag haben wir bereits die if-Abfragen kennengelernt, die uns ermöglichen, zu bestimmten Bedingungen Code auszuführen. Wir konnten damit unser Programm steuern, anstatt es von oben nach unten ablaufen lassen zu müssen.

Bei Switch-Blöcken handelt es sich um ein ähnliches Instrument, mit welchem wir ebenfalls unseren Programmablauf lenken können. Allerdings wird bei diesen der Codeblock nicht anhand einer zu erfüllenden Bedingung ausgeführt, sondern anhand von Konstanten.

2. Aufbau der Java Switch Case Anweisung

Was sind Konstanten?

Konstanten sind Werte, die feststehen, also konstant sind. Was ich genau damit meine, wirst du gleich sehen. Dazu werfen wir einen Blick auf die folgende Abbildung:

Ein Beispiel der Java Switch Case Anweisung

Wie du auf dem Bild erkennen kannst, habe ich ein kleines Programm geschrieben, in welches eine Java Switch Case Abfrage eingebaut ist. An erster Stelle deklariere und initialisiere ich dabei eine Variable.

Die Variable hat den Bezeichner „number“ und enthält den Wert 2.

Jetzt kommt diese neuartige Switch Case Abfrage ins Spiel.

Diese wird immer durch das Schlüsselwort switch eingeleitet, auf welches ein rundes Klammerpaar folgt. Dem Klammerpaar übergeben wir eine Variable. Das kann zum Beispiel die Variable „number“ sein, die oben bereits deklariert wurde.

Anschließend öffnet sich ein Codeblock, in welchem unterschiedliche Fälle definiert sind. Das Wort „Fall“ bedeutet auf Englisch „case“, weshalb du auch diesen Begriff mehrmals auf der Abbildung findest. Man kann dabei beliebig viele Cases definieren.

Im Beispiel haben wir erst mal drei Cases. Nämlich case 1, case 2 und case 3. Darunter folgt ein sogenannter default-Case. Was das ist, werde ich dir später noch erklären.

Jeder Case hat eine Konstante. Der erste Case hat in diesem Fall die Konstante 1, der zweite Case die Konstante 2 und der dritte Case die Konstante 3.

Jetzt ist ganz wichtig zu verstehen, dass mit den Zahlen, die neben „case“ stehen, nicht die Nummerierung gemeint ist, sondern lediglich konstante, selbst festgelegte Werte. „case 1“ muss also nicht zwangsläufig an erster Stelle angegeben werden.

Anstelle von „case 1“ könnte genauso gut „case 17“ stehen und darauffolgend „case 2“. Uns ist also keine Reihenfolge vorgeschrieben, sondern es geht lediglich um die Werte.

3. Wie funktioniert die Switch Case Abfrage?

Die Java Switch Case Anweisung funktioniert jetzt folgendermaßen:

Wir übergeben die Variable number zwischen den runden Klammern nach dem Schlüsselwort switch.

Dann beginnt sie immer beim ersten Case und prüft bei diesem, ob der Wert der Variable der Konstanten entspricht, die im jeweiligen Case definiert ist. In diesem Fall übergeben wir die Zwei, da diese in der Variable number steckt. Dann läuft das Programm von oben nach unten.

Bei case 1 haben wir die Konstante 1. Der Wert von number, also 2, entspricht nicht der 1, weshalb der Case ungültig ist und nicht ausgeführt wird.

Danach kommen wir zu case 2. Der Wert der Variable number ist 2 und die Konstante bei diesem Case ist ebenfalls 2.

Sie stimmen also überein und aus diesem Grund wird auch dieser Case ausgeführt.

Das Programm gibt die println-Methode und damit den Satz „Number hat den Wert 2“ in der Konsole aus.

4. Das Schlüsselwort break

Direkt im Anschluss folgt das Schlüsselwort break. Dieses signalisiert, dass die Switch-Anweisung abgebrochen und verlassen werden soll. 

Die genauen Auswirkungen dazu werden wir uns gleich noch im Detail ansehen.

Dadurch, dass wir das Schlüsselwort break aufgerufen haben, prüfen wir die nachfolgenden Cases gar nicht mehr. Wäre in der Variable number die Zahl 3 gestanden, wäre auch case 2 ungültig gewesen, da die Zwei nicht der Drei entspricht.

Das bedeutet: Das Programm hätte case 2 nicht ausgeführt und stattdessen überprüft, ob der dritte Fall, also case 3, mit der Variable übereinstimmt.

In case 3 befindet sich aktuell die 3, wodurch dieser Case der Variable entsprochen hätte. Das Programm hätte also die Anweisung des dritten Cases ausgeführt. Mit dem nachfolgenden break wäre anschließend wieder die Switch Case Abfrage verlassen worden.

5. Wofür ist default?

Aber was passiert, wenn keiner der Cases die entsprechende Konstante hat, die in der Variable steckt? In diesem Fall kommt default zum Einsatz.

Das heißt: Immer, wenn beispielsweise etwas eingegeben wird, das durch keinen Case abgedeckt ist, wird default ausgeführt, falls dies vorhanden ist.

Wenn wir in unserem Beispiel also alle Zahlen eingeben bis auf 1, 2 und 3, gibt das Programm immer default aus.

Damit ich dir noch einige wichtige Details dazu zeigen kann, sehen wir uns das Ganze jetzt mal in der Praxis an.

6. Die Java Switch Case Anweisung in der Praxis

In der Entwicklungsumgebung angekommen, bauen wir uns jetzt ein neues Beispiel.

Wir wählen wieder eine Variable vom Typ Integer, die wir month nennen und mit dem Wert 2 initialisieren.

int month = 2;

Die Zahlen, die wir in month speichern, sollen Monate repräsentieren. Eine 1 soll also für den Januar stehen, eine 2 für den Februar, eine 3 für den März, und so weiter.

Jetzt bauen wir eine Switch Case Anweisung. Dafür schreiben wir das Schlüsselwort switch und übergeben dann in Klammern die Variable month, da wir diese durchprüfen möchten:

int month = 2;

switch(month) { 

}

Nun können wir nach Belieben jegliche Fälle definieren. Den ersten Fall nenne ich case 1, weil die 1 schließlich den Monat Januar repräsentieren soll. Darin schreiben wir eine println-Methode mit dem String „Januar“ und setzen danach ein break:

switch(month) {
        case 1:  System.out.println("Januar");  break;
}

Weshalb man das break tatsächlich braucht, werde ich gleich noch im Detail erklären und dir in der Praxis zeigen.

Wir erstellen uns jetzt noch einen case 2, in welchem das Programm Februar ausgeben soll. Auch hier setzen wir wieder ein break am Ende der Zeile.

case 2:  System.out.println("Februar");  break;

Anschließend erstellen wir einen case 3, bei dem wir März ausgeben:

case 3:  System.out.println("März");  break;

Danach ergänzen wir noch einen case 4 für den April:

case 4:  System.out.println("April");  break;

Die default-Anweisung lassen wir vorerst noch weg. Wir speichern das Ganze jetzt mal und führen das Programm aus, um zu sehen, was passiert.

Es wird Februar in der Konsole ausgegeben

Und tatsächlich gibt es uns Februar aus. In der Variable month haben wir den Wert 2. Diese übergeben wir in den Klammern nach dem Schlüsselwort switch. Das Programm startet also oben und arbeitet nun folgendermaßen:

Entspricht der Wert 2 der Variable der 1? Nein.
Entspricht der Wert 2 der Variable der 2? Ja.

Aus diesem Grund erhalten wir in der Konsole „Februar“.

Wenn die Variable mit keinem Case übereinstimmt

Was passiert jetzt aber, wenn wir der Variable month den Wert 5 zuweisen? Dafür haben wir in unserem Beispiel schließlich keinen Case festgelegt und auch eine default-Anweisung gibt es nicht.

int month = 5;

Wenn wir das Programm so ausführen, sehen wir, dass nichts ausgegeben wird.

Was hier passiert, ist nämlich folgendes:
Jeder Case wird geprüft und am Ende stellt das Programm fest, dass kein Case der Zahl unserer Variable entspricht. Da es auch keinen default-Case gibt, springt es aus der switch-Anweisung heraus und arbeitet unterhalb dieser den Code weiter ab.

Hat man einen default-Case, wie beispielsweise den folgenden:

case 4:  System.out.println("April");  break;
default:  System.out.println("Anderer Monat");  break;

Dann gibt das Programm „Anderer Monat“ aus.

Bei dieser Java Switch Case Anweisung wird der default Case ausgegeben

Ändern wir den Wert der Variable month auf 200, wird ebenfalls „Anderer Monatausgegeben, weil default alles abdeckt, was nicht durch einen Case repräsentiert ist.

int month = 200;

Bei dieser Java Switch Case Anweisung wird der default Case ausgegeben

Jetzt weisen wir aber wieder den ursprünglichen Wert 2 zu.

7. Kann man break weglassen?

Was passiert aber, wenn wir das break nach der Zeile von case 2 vergessen?

case 1:  System.out.println("Januar");  break;
case 2:  System.out.println("Februar");

Beim Ausführen des Programms sehen wir, dass in der Konsole erst Februar ausgegeben wird und dann auch noch März.

Ohne break wird auch März noch mit ausgegeben

Das hat den folgenden Grund: Sobald der Wert der Variable mit einem Case zusammenpasst, wird die Anweisung ausgeführt. Bei jedem Case können im Übrigen auch mehrere Anweisungen stehen.

Wenn case 2 abgearbeitet ist und kein break folgt, erhält das Programm nicht das Signal, den switch-Block zu verlassen. Deshalb wird auch der nächste Case mit ausgeführt.

Dabei wird gar nicht mehr geprüft, ob die Werte übereinstimmen. Stattdessen führt das Programm den Code nach unten hin weiter aus bis zum nächsten break.

Das erklärt auch, weshalb es März mit ausgibt. Dann folgt das break, das den weiteren Ablauf der Switch-Anweisung beendet.

Wenn wir nach März das break löschen, wird natürlich auch noch der April mit ausgegeben, weil erst nach dem April wieder ein break auftaucht.

case 2:  System.out.println("Februar");
case 3:  System.out.println("März");
case 4:  System.out.println("April");  break;

Diesmal werden bei der Java Switch Case Anweisung Februar, März und April ausgegeben

Das ist im Prinzip die ganze Logik, die hinter der Java Switch Case Anweisung steckt.

8. Die Switch Case Anweisung mit mit Strings

Jetzt sollte man noch wissen, dass diese Abfrage nicht nur auf Integer-Zahlen beschränkt ist. Genauso können wir aus der Variable einen String machen und anstelle der Zwei direkt den Monat Februar übergeben:

String month = "Februar";

Daraufhin erscheinen in unserer Switch Anweisung natürlich erst mal Fehlermeldungen. Wir übergeben schließlich eine Variable vom Typ String und der Computer erkennt bereits, dass es bei den Cases gar keine Strings gibt. Es kann also nicht funktionieren.

Das bedeutet, dass wir als Konstanten für unsere Cases Strings definieren müssen. Anstatt also Zahlen zu schreiben, setzen wir direkt die Namen der Monate zwischen Anführungszeichen:

case "Januar":  System.out.println("Januar");  break;
case "Februar":  System.out.println("Februar");  break;
case "März":  System.out.println("März");  break;
case "April":  System.out.println("April");  break;
default:  System.out.println("Anderer Monat");  break;

Damit müssen wir die Cases auch nicht mehr so umständlich durch Zahlen darstellen. Wenn wir das Programm jetzt noch einmal ausführen, sehen wir, dass wieder Februar in der Konsole erscheint:

Auch mit Strings als Konstanten in der Java Switch Case Abfrage erhalten wir Februar in der Ausgabe

Der Unterschied liegt lediglich darin, dass jetzt der Typ String geprüft wird.

Das Programm stellt sich also die Fragen:
Stimmt Januar mit Februar überein? Nein.
Stimmt Februar mit Februar überein? Ja!

Aus diesem Grund führt es wieder die println-Methode hinter case Februar aus. Danach folgt ein break, wir verlassen die switch-Anweisung und es geht wieder unterhalb dieser im Code weiter.