Объявил объект в цикле WHILE. Не могу вызвать метод объекта за пределами цикла WHILE

    class Contact {
        String name;
        void call() {
            System.out.println("take it");
        }
    }
    class ContactTestDrive {
        public static void main(String[] args){
            
        int x = 8;
        Contact refc;
        
        while (x < 10) {
        refc = new Contact();
            x = x + 1;
            refc.call();
        }
        
        refc.call();
}
}

При компиляции выдает данную ошибку:

//ContactTestDrive.java:13: error: variable refc might not have been initialized
        refc.call();
        ^

Не понимаю в чем проблема так как тип переменной refc объявлен, соответственно указанно имя переменной. В цикле создан объект соответствующего типа. При переносе вызова метода объекта в цикл, все работает. За пределами выдает указанную выше ошибку. Смысл самого кода не важен, интересует причина данной ошибки.


Ответы (1 шт):

Автор решения: Igor

Причина ошибки в том, что компилятор не aнализирует условие цикла. Он видит цикл с условием. Выполнится условие или нет - выяснится во время выполнения. С точки зрения компилятора возможна ситуация, когда выполнение в цикл не зайдет, и переменная refc останется неназначенной.

→ Ссылка