break выход из цикла или всё-таки

162
30 августа 2019, 00:30

break - выбрасывает вас из цикла либо же ключевое слово которое выходит из цикла. Завершить цикл раньше времени и тд.

А вот у нас есть оператор switch и в нём так-то тоже пишут break, так почему везде пишут про то, что break всегда "выходит" из цикла?

Answer 1

Не знаю почему «везде» так пишут, но в спецификации Java про break написано точно (§14.15 The break Statement):

A break statement with no label attempts to transfer control to the innermost enclosing switch, while, do, or for statement of the immediately enclosing method or initializer; this statement, which is called the break target, then immediately completes normally.

Инструкция break без метки пытается передать управление наиболее глубоко вложенной охватывающей инструкции switch, while, do или for непосредственно охватывающего блока или инициализатора; затем эта инструкция, которая называется целевой, немедленно завершается нормально.

Также в спецификации описывается вариант break с указанием метки, который может вывеcти из любой охватывающей инструкции (не только наиболее глубокой).

Answer 2

В Java оператор break (один из операторов "перехода") действительно используется как в циклах, так и в конструкции оператора switch. В циклах, при наступлении определенного условия, этот оператор прерывает выполнение, пропускается остальной код в теле цикла и происходит передача управления на оператор, следующий за циклом. Внутри последовательности операторов в конструкции switch оператор break также используется для прерывания данной последовательности. Как только выполняется условие в операторе case, "срабатывает" break и, аналогично циклам, управление передается на оператор, следующий за конструкцией switch. Следует отметить, что в конструкции switch наличие оператора break не является обязательным. При его отсутствии программа продолжит выполнение со следующим оператором case, например, при необходимости проверки выполнения не одного, а ряда условий выраженных в нескольких операторах case.

class BreakExample {
    public static void main(String[] args) {
        for(int i=0; i<6; i++)
        switch(i) {
            case 0:
            case 1:
            case 2:
                System.out.println("Значение i=" + 
                    i +  " и это меньше 3");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("Значение i=" + 
                    i + " и это больше 2, но меньше 6");
                break;
        }
    }
}
READ ALSO
Загрузка данных из Firebase database в RecyclerView фрагмента

Загрузка данных из Firebase database в RecyclerView фрагмента

В фрагменте есть RecyclerView, в который должны загружаться картинкиОданко при тесте приложение вылетает при переходе на фрагмент с этим RecyclerView

215
Вызов конструктора из конструктора с [дубликат]

Вызов конструктора из конструктора с [дубликат]

На данный вопрос уже ответили:

164
Простой jUnit тест

Простой jUnit тест

Всем приветНаписал мини проект в которой из url достаю json, превращаю в обьекты и заношу в бд

188
Ошибка в dbUnit

Ошибка в dbUnit

При запуске теста в dbUnit выскакивает ошибка orgdbunit

173