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

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

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

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

Область действия, как обычно, ограничена`{` а также`}`.



Вы можете определить область, используя {} вокруг вашего случая.



Область переменных, определенных в`switch()` утверждение будет таким же, как в нормальном блоке, который окружен`{` а также`}`.

Поэтому каждая переменная, определенная в`switch()` Оператор виден для всего блока, как только он определен.



Сфера`b` блок переключателя - между объявлением и разделителем`}` -

Тем не менее, вы должны знать, что если вы объявите`int b` внутри`case 1:`, вы не будете иметь доступ к переменной`b` внутри`case 0:`

Чтобы ответить на вопрос, который вы задаете в комментариях Java, вы можете проверить этот более простой пример:

Надеюсь, поможет.



в вашем коде, если a не равно 0, b никогда не будет инициализирован. Вы должны определить b перед оператором switch.



Ваш`case` блоки не имеют локальной области видимости. Это не серия`if`...`else if`...`else` блоки, Java реализует его как серию`GOTO`s.



Сфера`b` это блок. У вас есть только один блок, который включает в себя все`case`s. Вот почему вы получаете ошибку компиляции при переопределении`b` во второй`case`.

Вы можете обернуть каждый`case` в собственном блоке, как

но я думаю, что FindBugs или CheckStyle будут жаловаться на это.