Оператор switch

Оператор switch в Java- это условный оператор, который дает возможность сравнивать переменную со списком значений. 

Рассмотрим общую форму написания оператора switch:

switch(выражение) {
    case значение1:
        // Блок кода 1
        break;
    case значение2:
        // Блок кода 2
        break;
    ...
    case значениеN:
        // Блок кода N
        break;
    default :
        // Блок кода для default
}

В круглых скобках мы указываем выражение, значение которого будет сравниваться со списком значений, перечисленных после ключевого слова case. Если выражение совпадает со значением1, то выполняется блок кода, указанный после значение1. Если выражение не совпадает ни с одним из значений, то выполняется блок кода для default. Этот блок кода является необязательным - можно написать оператор switch и без него.

Выражение в switchдолжно иметь тип char, byte, short, intenum (начиная с Java 6) или String(начиная с Java 7). Использование любого другого типа, например float, приведет к ошибке компиляции.

Оператор switchможет только проверять на равенство. Такие операторы как >=, <= недопустимы.

Рассмотрим первый пример - задается число от 1 до 3. Если 1 - включается зеленый цвет светофора, 2 - желтый и 3 - красный. Если любое другое число, то выполнится блок кода default:

public class TrafficLight {
    public static void main(String[] args) {
        int x = 3;
        switch (x) {
            case 1:
                System.out.println("Зеленый");
                break;
            case 2:
                System.out.println("Желтый");
                break;
            case 3:
                System.out.println("Красный");
                break;
            default:
                System.out.println("Неправильно введено число");
                break;
        }
    }
}

Для нескольких значений case можно указывать один блок, как показано в следующем примере:

public class SwitchDemo1 {
    public static void main(String[] args) {
        int month = 4;
        String season;
        switch (month) {
            case 12:
            case 1:
            case 2:
                season = "Winter";
                break;
            case 3:
            case 4:
            case 5:
                season = "Spring";
                break;
            case 6:
            case 7:
            case 8:
                season = "Summer";
                break;
            case 9:
            case 10:
            case 11:
                season = "Autumn";
                break;
            default:
                season = "Not a Month";
        }
        System.out.println("April is in the " + season + ".");
    }
}

Если выражение в switch имеет тип меньший чем int (byte, short или char), case константа должна соответствовать этому типу. Например следующий пример не откомпилируется:

byte number = 2;
switch (number) {
    case 13:
    case 129://compiler error
}

Также нельзя использовать несколько case констант с одним и тем же значением. Следующий блок кода не откомпилируется:

int number = 90;
switch (number) {
    case 50:
        System.out.println("50");
    case 50:
        System.out.println("50"); //compile error
    case 140:
        System.out.println("140");
    default:
        System.out.println("default");
}

Выражение в switch может содержать Character, Byte, Short и Integer значения:

switch (new Integer(9)) {
    case 9:
        System.out.println("9");
}

Case константы просматриваются сверху вниз, и первая совпавшая case константа в switch является точкой входа. Соответствующий ей блок и все последующие блоки будут выполняться. Например:

public class SwitchDemo2 {
    public static void main(String[] args) {
        String str = "potato";
        switch (str) {
            case "tomato":
                System.out.print("tomato ");
            case "potato":
                System.out.print("potato ");
            case "cucumber":
                System.out.print("cucumber ");
            default:
                System.out.println("any");
        }
    }
}

 Результат выполнения программы:

potato cucumber any

Для того чтобы выйти из switch выражения, используйте ключевое слово break. Например изменим предыдущий пример, чтобы выводилось только одно слово:

Vegetable p = Vegetable.potato;
switch (p) {
    case tomato:
        System.out.print("tomato ");
        break;
    case potato:
        System.out.print("potato ");
        break;
    case cucumber:
        System.out.print("cucumber ");
        break;
    default:
        System.out.println("any");
}

Результат будет:

potato 

Секция default в switch обрабатывает все значения, которые не указаны явно в одной из case секций. Секция default может размещаться в любом месте, необязательно в конце:

public class SwitchDemo3 {
    public static void main(String[] args) {
        int z = 8;
        switch (z) {
            case 1:
                System.out.println("Fall to one");
            default:
                System.out.println("default");
            case 3:
                System.out.println("Fall to three");
            case 4:
                System.out.println("Fall to four");
        }
    }
}

Начиная с Java 7 можно использовать объекты типа String в switch. Например:

String exam = null;
switch (exam) {
    case "OCPJP 7":
        System.out.print(exam + ": 1Z0-804");
        break;
    case "OCPJP 8":
        System.out.print(exam + ": 1Z0-809");
        break;
    default:
        System.out.print(exam + ": ----");
        break;
}
Read also:
Comments