Условия и циклы

Тема дорожной карты · Java

Управление потоком выполнения в Java определяет порядок исполнения операторов, позволяя программам принимать решения, повторять действия и переходить по различным ветвям кода в зависимости от условий времени выполнения. Основные конструкции для принятия решений — оператор if-else и выражение switch: в Java 14+ switch был расширен синтаксисом стрелочных ветвей (case "GET" -> handleGet();) и превращён в выражение, возвращающее значение непосредственно, а в Java 21 к switch добавилось сопоставление с образцом через sealed classes и record patterns. Итерация в Java реализуется тремя формами циклов: классический цикл for с явным счётчиком, циклы while и do-while для повторения по условию и расширенный цикл for-each (for (String item : list)), который внутренне использует протокол Iterable/Iterator из Java Collections Framework. Операторы break и continue изменяют выполнение цикла — break с меткой (break outer;) выходит из именованного охватывающего цикла, что полезно при поиске в вложенных массивах или матрицах. Управление потоком выполнения в Java — это фундамент, на котором строятся конвейеры Stream API (filter, map, reduce): понимание императивных форм значительно упрощает рассуждение об их декларативных функциональных эквивалентах и выбор между ними с точки зрения читаемости и оптимизации JIT-компилятором.

Как это работает

Условия и циклы покрывает классы (единица компиляции), примитивные типы (int, long, double, boolean — не объекты), reference-типы (объекты, массивы, String — на heap), управление (if/else, switch — теперь со стрелочной формой и pattern matching в 21+), циклы (for, while, for-each), пакеты + импорты, модификаторы доступа (public/protected/package-private/private). Современная Java: var для type inference (10+), текстовые блоки """...""" (15+), records (16+), sealed classes (17+), pattern matching (21+).

Когда применять

Современные фичи — при таргете 17+: records для DTO (срезает 90% бойлерплейта), var для type-inference локальной переменной (когда RHS очевиден), текстовые блоки для multi-line строк, sealed-типы для закрытых иерархий. var — не для полей и возвратов методов (теряется читаемость). Optional — осторожно; никогда .get() без проверки; используйте .orElse(), .map(), .ifPresent().

Типичные ошибки

Ловушки Условия и циклы: сравнение строк == вместо .equals() (классика); примитивные массивы там, где коллекции лучше; игнор Optional и возврат null (NPE-чума продолжается); String s = ""; for(...) s += x; (квадратично — используйте StringBuilder). Читайте Java-туториал для вашей версии; старые туториалы отстают.

Связанные понятия

Полезные ресурсы