Какой тип ошибки возникает при использовании неинициализированной переменной? - PullRequest
1 голос
/ 10 марта 2019

Я думаю, что следующий Java-код вызовет RuntimeError (технически говоря), потому что он ссылается на что-то несуществующее (очень похоже на доступ к восьмому элементу в массиве размера 5).

int i;
System.out.println(i);

Тем не менее, IDE ловит его, подчеркивая его красным.Это делает это ошибкой синтаксиса / компилятора?Или ошибка времени выполнения, которую IDE достаточно умен, чтобы уловить?

На самом деле, это ошибка компилятора, но технически это не ошибка синтаксиса?Я всегда считал их синонимами, но, возможно, синтаксические ошибки - это просто ошибка компилятора ...

Я знаю, что это просто семантика, но я преподаю класс и чувствую себя глупо, не зная, какой тип ошибкитехнически это так.

Ответы [ 4 ]

3 голосов
/ 10 марта 2019

Если int i; объявляет локальную переменную, это ошибка компиляции, прежде чем она будет назначена;см. ответ Эрана для соответствующего раздела JLS.

Ошибки компиляции и ошибки времени компиляции являются синонимами.(Ошибка компилятора является другим синонимом, хотя иногда люди используют его для ссылки на ошибки в компиляторе.)

Делает ли это ошибкой синтаксиса / компилятора?

Это ошибка компиляции.Но это не синтаксическая ошибка.

Этот тип ошибки компиляции обычно называется семантическая ошибка .

A синтаксическая ошибка означает, что код не соответствует заданному синтаксису языка (как определено грамматикой).Другими словами, синтаксический анализатор не может его проанализировать.

A семантическая ошибка - это любая ошибка компиляции, которая не является синтаксической ошибкой.В зависимости от языка программирования семантические ошибки могут включают в себя такие вещи как:

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

Или ошибка времени выполнения, которую IDE достаточно ловко ловит?

Это не ошибка времени выполнения.

На самом деле это ошибка компилятора, но нетехнически синтаксическая ошибка?

Правильно.

Я всегда считал их синонимами, но, возможно, синтаксические ошибки - это просто тип ошибки компилятора ...

Они не являются синонимами.Синтаксические ошибки - это всего лишь один вид ошибок компиляции.

(К сожалению, некоторые реализации Javascript приводят в замешательство все ошибки компиляции как «Синтаксическая ошибка». Но это не имеет значения, если вы учите Java. Java не является Javascript.)

2 голосов
/ 10 марта 2019

Это ошибка времени компиляции, как указано в JLS:

14.4.2. Выполнение объявлений локальных переменных

Оператор объявления локальной переменной является исполняемым оператором. Каждый раз, когда он выполняется, деклараторы обрабатываются в порядке слева направо. Если декларатор имеет выражение инициализации, выражение оценивается и его значение присваивается переменной.

Если у декларатора нет выражения инициализации, то перед каждой ссылкой на переменную должно предшествовать выполнение присваивания переменной , или возникает ошибка времени компиляции по правилам §16. ,

0 голосов
/ 10 марта 2019

Это простая ошибка во время выполнения. IDE укажет на это, однако, если вы запустите его, вы получите ошибку, как будто мне нужно инициализировать

0 голосов
/ 10 марта 2019

Вы пытались скомпилировать его без IDE?
В Java это определяется как ошибка времени компиляции: ошибка: переменная i, возможно, не была инициализирована

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