Оператор switch case в Java

Оператор switch case определяет, равно ли значение переменной одному из значений в ряду значений. Каждое значение называется ветвью.

Синтаксис

Синтаксис оператора switch case выглядит следующим образом:

switch(выражение){ case значение : //оператор break; //необязательно case значение : //оператор break; //необязательно //Можно иметь любое количество операторов case. default : //необязательно //инструкция }

Оператор switch case имеет следующие правила:

  • Тип переменной в операторе switch может быть: byte, short, int или char. Начиная с Java SE 7 switch поддерживает тип String, а метка case должна быть строковой константой или литералом.

  • Оператор switch может иметь несколько операторов case. После каждого case указывается значение для сравнения и двоеточие.

  • Тип данных значения в операторе case должен совпадать с типом данных переменной, и это может быть только константа или литеральная константа.

  • Когда значение переменной равно значению оператора case, операторы после оператора case начинают выполняться до появления оператора break, после чего происходит выход из оператора switch.

  • При обнаружении оператора break выполнение оператора switch завершается. Программа переходит к оператору после оператора switch для выполнения. Оператор case не обязательно должен содержать оператор break. Если оператор break отсутствует, программа продолжит выполнять следующий оператор case до появления оператора break.

  • Оператор switch может содержать ветвь default, которая обычно является последней ветвью оператора switch (она может быть размещена в любом месте, но рекомендуется последней). Ветвь default выполняется, когда ни одно значение оператора case не равно значению переменной. Ветви default не нужен оператор break.

Когда выполняется switch case, он всегда сначала сопоставляется. Если сопоставление успешно, он возвращает значение текущего case, а затем определяет, продолжать вывод или выйти из проверки, в зависимости от наличия break.

Пример

Код файла Test.java:

public class Test { public static void main(String args[]){ //char grade = args[0].charAt(0); char grade = 'C'; switch(grade) { case 'A' : System.out.println("Отлично"); break; case 'B' : case 'C' : System.out.println("Хорошо"); break; case 'D' : System.out.println("Удовлетворительно"); break; case 'F' : System.out.println("Вам нужно работать усерднее"); break; default : System.out.println("Неизвестная оценка"); } System.out.println("Ваша оценка" + grade); } }

Результат компиляции и выполнения приведенного выше кода выглядит следующим образом:

良好
你的等级是 C

Если в блоке case нет оператора break, JVM не будет последовательно выводить возвращаемое значение, соответствующее каждому case; вместо этого она продолжает сопоставление, и если сопоставление не удалось, выполняется ветка default.

Код файла Test.java:

public class Test { public static void main(String args[]){ int i = 5; switch(i){ case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); } } }

Результат компиляции и выполнения приведенного выше кода выглядит следующим образом:

default

Если в блоке case нет оператора break, то после успешного сопоставления, начиная с текущего case, будут выведены значения всех последующих case.

Код файла Test.java:

public class Test { public static void main(String args[]){ int i = 1; switch(i){ case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); default: System.out.println("default"); } } }

Результат компиляции и выполнения приведенного выше кода выглядит следующим образом:

1
2
default

Если в текущем сопоставленном блоке case нет оператора break, то начиная с текущего case будут выведены значения всех последующих case. Если в последующем блоке case есть оператор break, произойдёт выход из проверки.

Код файла Test.java:

public class Test { public static void main(String args[]){ int i = 1; switch(i){ case 0: System.out.println("0"); case 1: System.out.println("1"); case 2: System.out.println("2"); case 3: System.out.println("3"); break; default: System.out.println("default"); } } }

Результат компиляции и выполнения приведенного выше кода выглядит следующим образом:

1
2
3
Другие расширения