Оператор 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.