Урок 5

Оператор switch


Оператор switch дает возможность сравнивать переменную со списком значений. 

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

Пример 1. Общая форма switch-case-default 

switch(expression) {
    case value1:
        // Statements
        break;
    case value2:
        // Statements
        break;
    ...
    case valueN:
        // Statements
        break;
    default :
        // Statements
}

Пример 2. Использование switch-case-default 

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 должно иметь тип char, byte, short, int, enum (начиная с Java 6) или String (начиная с Java 7).  Использование любого другого типа, например float, приведет к ошибке компиляции.

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

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

Пример 3. Несоответствие значения заявленному типу

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

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

Пример 4. 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 значения:

Пример 5. Использование класса обертки в switch выражении

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

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

Пример 6. switch-case выражение без break

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.

Пример 7. switch-case выражение без 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 обрабатывает все значения, которые не указаны явно в одной из case секций. Секция default может размещаться в любом месте, необязательно в конце:

Пример 8. Использование 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. Например:

Пример 9. Использование объекта типа String в switch выражении, которое заканчивается генерацией NullPointerException

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;
}

 

Sources:  SCJP Sun Certified Programmer for Java 6 Exam 310-065



0 comments
Leave your comment: