Объявление и инициализация переменных в переключателях Java

У меня есть сумасшедший вопрос о Java-переключателях

int key = 2;

switch (key) {
    case 1:
        int value = 1;
        break;
    case 2:
        value = 2;
        System.out.println(value);
        break;
    default:
        break;
}

Сценарий 1 — Когда ключ равен двум, он успешно печатает значение как 2.
Сценарий 2. Когда я собираюсь прокомментировать значение = 2в случае 2:он кричит, говоря Значение локальной переменной, возможно, не было инициализировано.

Вопросы:

Сценарий 1: если поток выполнения не переходит к case 1:(когда ключ = 2), то как он узнает тип переменной значения как интервал ?

Сценарий 2: если компилятор знает тип переменной значения как int, то он должен получить доступ к выражению int value = 1;в case 1 :.(Декларация и инициализация). Тогда почему это скворк Когда я собираюсь прокомментировать value = 2в case 2:, говоря Значение локальной переменной, возможно, не было инициализировано.

92
задан Mr. Polywhirl 9 January 2015 в 14:46
поделиться