Урок 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 + ".");
    }
}

The case constants should evaluate to the same type as the switch expression. And it should be not only a final but a compile time constant as well. For example:

 Пример 3. Using of not Compile Time Constants in case Expression

final int a1 = 0;
final int a2;
a2 = 1;
int x = 2;
switch (x) {
    case a1: // ok
    case a2: // compiler error
}

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

Пример 4. Using of byte Values in switch Expression

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

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

Example 5. Multiple case Constants with the same Expression

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 значения:

Example 6. Using of Wrapper Type in the switch Expression

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

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

Example 7. The switch-case Expression without break

public class SwitchDemo{
    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");
        }
    }
}

 The output will be:

potato cucumber any

To exit the switch statement the break keyword is used.

Example 7. The switch-case Expression with break

For example let's modify the previous example to have printed only one item:

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

The output will be:

potato 

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

Example 8. Using of the Default case

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

Starting from Java 7 it is possible to use String objects in the switch expression. Let's see how to use String in switch case in java:

 

Example 9. Using of the String Object in the switch Expression which ends with 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: