Оператор break в Java
Оператор break принудительно прекращает выполнение текущего цикла (for, while, do-while) или выходит из блока switch. После break управление передаётся первой инструкции, идущей за прерванной конструкцией.
Java также поддерживает маркированный break — с указанием метки (label:), что позволяет выйти сразу из нескольких вложенных циклов. Это редко используется, но иногда заметно упрощает код.
Синтаксис
// обычный break
while (условие) {
if (нужноВыйти) break;
}
// маркированный break
outer:
for (...) {
for (...) {
if (условие) break outer;
}
}
Пример 1. break в цикле for
public class BreakFor {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i == 5) break;
System.out.println("i = " + i);
}
System.out.println("После цикла");
}
}
Вывод:
i = 1
i = 2
i = 3
i = 4
После цикла
Пример 2. Поиск в массиве
public class FindFirst {
public static void main(String[] args) {
int[] arr = {3, 8, 12, 27, 4};
int target = 12;
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
index = i;
break;
}
}
System.out.println("Индекс " + target + ": " + index);
}
}
Вывод:
Индекс 12: 2
Пример 3. break в while по условию датчика
public class SonarStop {
public static void main(String[] args) {
int[] readings = {100, 75, 50, 18, 5};
int i = 0;
while (true) {
int d = readings[i++];
System.out.println("d = " + d);
if (d < 20) {
System.out.println("СТОП");
break;
}
}
}
}
Вывод:
d = 100
d = 75
d = 50
d = 18
СТОП
Пример 4. break в switch
public class SwitchBreak {
public static void main(String[] args) {
int code = 2;
switch (code) {
case 1: System.out.println("Один"); break;
case 2: System.out.println("Два"); break;
case 3: System.out.println("Три"); break;
default: System.out.println("Другое");
}
System.out.println("После switch");
}
}
Вывод:
Два
После switch
Пример 5. Маркированный break (вложенные циклы)
public class LabeledBreak {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int target = 5;
outer:
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == target) {
System.out.println("Найдено в [" + i + "][" + j + "]");
break outer;
}
}
}
System.out.println("Поиск завершён");
}
}
Вывод:
Найдено в [1][1]
Поиск завершён
Пример 6. break для выхода из бесконечного цикла
public class InfiniteExit {
public static void main(String[] args) {
int n = 1;
while (true) {
if (n * n > 50) break;
System.out.println(n + "^2 = " + (n * n));
n++;
}
System.out.println("Стоп на n = " + n);
}
}
Вывод:
1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 25
6^2 = 36
7^2 = 49
Стоп на n = 8
Подводные камни
break выходит только из ОДНОГО уровня. Из вложенных циклов обычный
breakвыйдет только во внешний цикл. Для двойного выхода — маркированныйbreak.break не для if.
breakне работает в обычной веткеifвне цикла/switch — будет ошибка компиляции.Забыли break в switch. Отсутствие
breakв классическомswitchприводит к «проваливанию» в следующийcase— частый источник багов.Чрезмерное использование. Если в цикле несколько
break-точек и сложная логика — стоит подумать над рефакторингом (отдельный метод сreturn).break и continue. Не путайте:
breakвыходит из цикла полностью, аcontinueпереходит к следующей итерации.
См. также
Примечание
Лицензия и источники
Концепция описана на основе официального Java Tutorial от Oracle (https://docs.oracle.com/javase/tutorial/), Oracle Free Documentation License. Перевод, примеры и пояснения — © AlashEd Wiki.