Хотя (false) вызывает ошибку компиляции недопустимых операторов - программирование
Подтвердить что ты не робот

Хотя (false) вызывает ошибку компиляции недопустимых операторов

Недавно я удалил блок кода из нашей базы кода до выпуска и использовал оператор if (false), чтобы предотвратить выполнение:

if (false) {
    ArrayList<String> list = new ArrayList<String>();
    ...
}

Это компилируется и предотвратит выполнение блокирующего кода кода (правильно или неправильно, а не текущий аргумент).

Однако, случайно, я изменил блок выше:

while (false) {
    ArrayList<String> list = new ArrayList<String>();
    ...
}

и получил ошибку компиляции недостижимого оператора.

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

4b9b3361

Ответ 1

В обоих случаях компилятор должен вызывать ошибку, потому что код между скобками по существу бессмыслен, , но if (false) хранится в Java для имитации препроцессора C/С++ #if 0, довольно распространенного способ отключения частей кода для тестирования или отладки.

EDIT: для справки, "условная компиляция" подробно описана в конце главы 14.21 Спецификации языка Java.

Ответ 2

"Java использует простой алгоритм анализа потока, чтобы найти наиболее распространенные случаи недостижимого кода, и все такие недостижимые кодовые блоки будут помечены как ошибки времени компиляции. Поэтому ваш оператор while (false) {...}" выдает ошибку.

Однако Java делает специальное исключение для "if (false) {...}", потому что программисты часто используют эту конструкцию во время разработки, чтобы временно отключить часть программы. Вот почему компилятор принимает это утверждение.

Если вас интересуют подробные подробности, обратитесь к описанию спецификаций языка Java недопустимых операторов @http://docs.oracle.com/javase/specs/#14.21."

Цитата из http://www.coderanch.com/t/266678/java-programmer-SCJP/certification/false-false