Java пустые блоки внутри метода, отличного от других блоков? - PullRequest
0 голосов
/ 04 октября 2018

Я понимаю, что блок определяет область действия переменной.И пустые блоки внутри метода предназначены для установки области видимости.Но почему пустые блоки внутри методов, инициализирующих переменные, также отличаются от блоков, используемых с циклами и т. Д.

class A{
    public static void main(String args[]){
        int a;
        int b:
        {
            a = 10;
        }
        for(int i = 0; i < 1; i++){
            b = 20;
        }
        System.out.println(b); //error here
        System.out.println(a);
        // doesnt give error and prints 10. why?
    }
}

Мой вопрос: почему свойства пустого блока внутри метода не похожи на блоки, используемые с циклами илиусловные блоки и т. д.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Поскольку этот блок для a будет выполняться в любом случае, поскольку в нем нет операторов вложения.Но b инициализируется внутри цикла, поэтому компилятор видит, что b = 20 выполняется только внутри цикла, а если цикл не выполняется, b не инициализируется.И компилятор не запускает ваш код, чтобы понять, что нет таких путей кода, где цикл не выполняется.

0 голосов
/ 04 октября 2018

Я подозреваю, что вы получаете компиляцию, а не ошибку во время выполнения.Предполагается, что b никогда не инициализируется, потому что компилятор предполагает, что цикл for может не выполняться.

Вы должны всегда устанавливать для переменных значение по умолчанию, на всякий случай.

0 голосов
/ 04 октября 2018

Порядок исполнения.

См. Статью здесь:

Порядок исполнения

...