Почему нет ошибки времени компиляции для не инициализации локальной переменной, если локальная переменная объявлена ​​следующим образом int a = 10, b = 3, m ;? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь выполнить следующий код:

public class HelloWorld{
     public static void main(String []args){
         int a=10,b=3,m;
         System.out.println("Hello World "+a+" " + b);
     }
}

Я ожидал ошибку компиляции из-за не инициализации локальной переменной 'm', но программа успешно запустилась и выдала мне вывод.

Почему это так? Я думал во всех случаях, если локальная переменная не инициализирована, компилятор выдаст ошибку.

Когда я пытаюсь скомпилировать приведенный ниже код

public class HelloWorld{
     public static void main(String []args){
         int a=10,b=3,m;
         System.out.println("Hello World "+a+" " + b + " " +m);
     }
}

Здесь я использую значение 'm' и получаю ошибку за то, что не инициализировал локальную переменную.

Но почему Java не показывает ошибку в первом случае?

Ответы [ 2 ]

2 голосов
/ 19 мая 2019

Что касается компилятора Java, неинициализированные локальные переменные - это хорошо. Пока вы не пытаетесь использовать их ценность, то есть. Только ваша IDE должна предупредить вас, что m не используется. Мой Eclipse говорит: «Значение локальной переменной m не используется». Это всего лишь предупреждение, ничто не мешает запуску вашей программы.

Когда вы пытаетесь использовать (неопределенное) значение, как во втором фрагменте, сообщается об ошибке.

Рассмотрим этот фрагмент. Я повторно использую ваши две строки и добавил еще две.

        int a=10,b=3,m;
        System.out.println("Hello World "+a+" " + b);
        m = 14;
        System.out.println(m);

Он тоже работает нормально. Я включил его, чтобы проиллюстрировать, что когда компилятор читает ваши две строки, он не проверяет, инициализируется ли m позже, и поэтому не находит причин для возражений до сих пор. (Кроме того, лучшим стилем кода было бы объявление m только при его инициализации, а также объявление каждой переменной в отдельной строке.)

PS Если вы объявляете m в отдельной строке или вместе с a и b, это не имеет значения для компилятора, это чисто стилистический вопрос.

1 голос
/ 19 мая 2019

Произошла ошибка компилятора для с использованием неинициализированной локальной переменной. Только тогда необходимо, чтобы переменная имела определенное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...