Переключатель Java: объявление переменной и область видимости

Как компилятор Java обрабатывает следующий блок переключателей? Какова область действия переменной «b»?

Обратите внимание, что переменная 'b' объявлена ​​только в первой ветви оператора switch. Попытка объявить его во второй ветке также приводит к ошибке компиляции "дублировать локальную переменную".

    int a = 3;
    switch( a ) {
    case 0:
        int b = 1;
        System.out.println("case 0: b = " + b);
        break;
    case 1:
        // the following line does not compile: b may not have been initialized
        // System.out.println("case 1 before: b = " + b);
        b = 2;
        System.out.println("case 1 after: b = " + b);
        break;
    default:
        b = 7;
        System.out.println("default: b = " + b);
    }

Примечание: приведенный выше код компилируется компилятором java 1.6.

8
задан Marius Ion 7 June 2012 в 13:54
поделиться