Оператор break в Java
В Java нет оператора goto, но есть три оператора перехода: break, continue и return. Они передают управление в другую часть программы. В этом уроке подробно разберём оператор break.
Оператор языка Java break может применяться в следующих случаях:
- Для завершения последовательности операторов в операторе
switch, что было рассмотрено в уроке Оператор switch. - Для досрочного выхода из цикла.
- В качестве «цивилизованной» формы оператора безусловного перехода
goto(break с меткой).
Применение оператора break для выхода из цикла
Рассмотрим пример применения оператора break для выхода из цикла while. По условию цикл while должен выполниться 100 раз. Если при какой-то непредвиденной ситуации мы хотим выйти раньше, используется оператор break.
public class BreakLoopExample1 {
public static void main(String[] args) {
int i = 0, n = 100;
while (i < n) {
if (i == 10) {
break;
}
System.out.println("i: " + i++);
}
System.out.println("Цикл завершен.");
}
} Следует отметить, что оператор break не предназначен служить обычным средством выхода из цикла — для этого есть условное выражение самого цикла. Break стоит применять для выхода из цикла только в особых случаях. Кроме того, break без метки допустим только внутри цикла или оператора switch — в любом другом месте компилятор выдаст ошибку break outside switch or loop.
Неочевидный момент
Если оператор switch находится внутри цикла, то break внутри него завершает только switch, а не цикл. Чтобы из ветки case выйти сразу из цикла, понадобится break с меткой — на этом часто ошибаются на собеседованиях.
Break во вложенных циклах
Если в программе применяется ряд вложенных циклов, то оператор break осуществляет выход только из самого внутреннего цикла. Например:
public class BreakLoopExample2 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Проход " + i + " : ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break;
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Циклы завершены");
}
}
Результат выполнения программы:
Проход 0 : 0 1 2 3 4 5 6 7 8 9
Проход 1 : 0 1 2 3 4 5 6 7 8 9
Проход 2 : 0 1 2 3 4 5 6 7 8 9
Циклы завершены В цикле можно использовать больше одного оператора break, но это ухудшает читаемость кода — лучше так не делать.
Оператор break с меткой
Рассмотрим применение оператора break с меткой. Этот вариант может использоваться в качестве цивилизованной формы оператора goto, которого нет в языке Java в отличие от некоторых других языков программирования.
Общая форма оператора break с меткой:
break метка; Здесь метка — это имя метки, обозначающее блок кода. Им может быть как самостоятельный блок кода, так и целевой блок другого оператора. Чтобы пометить блок, достаточно поместить в его начале метку.
Метка — это любой допустимый в Java идентификатор с двоеточием.
Break с меткой для выхода из вложенных циклов
В следующем коде три блока кода отмечены метками first, second, third. При достижении строки break second; мы выходим из блока second.
public class BreakLoopExample3 {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед break.");
if (t) {
break second;
}
System.out.println("Этот код не будет выполнен.");
}
System.out.println("Этот код не будет выполнен.");
}
System.out.println("После второго блока.");
}
}
} Результат выполнения кода:
Перед break.
После второго блока. Чаще всего break с меткой используется для выхода сразу из нескольких вложенных циклов, как показано в этом примере:
public class BreakLoopExample4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Проход " + i + " : ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выход из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка не будет выводиться");
}
}
}
Важное ограничение: метка должна стоять непосредственно перед тем блоком или циклом, из которого выполняется выход. «Прыгнуть» в произвольное место программы, как это делает настоящий goto, break с меткой не может.
Сравнение break, continue и return
Break — не единственный оператор перехода в Java. Сравним его с continue и return:
| Оператор | Что делает | Где допустим |
|---|---|---|
| break | Полностью завершает цикл или switch; с меткой — помеченный блок | Внутри цикла или switch |
| continue | Пропускает оставшуюся часть текущей итерации и переходит к следующей | Только внутри цикла |
| return | Завершает выполнение всего метода и возвращает управление вызывающему коду | В любом месте метода |
Часто задаваемые вопросы
Чем break отличается от continue?
Break полностью завершает цикл — выполнение продолжается с первого оператора после цикла. Continue завершает только текущую итерацию: управление переходит к проверке условия (в while) или к выражению итерации (в for), и цикл продолжается.
Как выйти сразу из нескольких вложенных циклов?
Обычный break завершает только внутренний цикл. Для выхода из внешнего используйте break с меткой (break outer;) либо вынесите вложенные циклы в отдельный метод и завершите его оператором return — второй вариант часто читается лучше.
Можно ли использовать break вне цикла и switch?
Нет. Break без метки допустим только внутри цикла или оператора switch, иначе компилятор выдаст ошибку «break outside switch or loop». Break с меткой можно применять и к обычному помеченному блоку кода.
Break с меткой — это то же самое, что goto?
Нет. Goto позволяет перейти в произвольное место программы, а break с меткой — только выйти из помеченного блока или цикла, внутри которого он находится. Перейти «вперёд» или в чужой блок нельзя, поэтому такой код остаётся структурированным.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии