С оператором break мы уже встречались когда изучали оператор switch, а так же в операторах циклов.
В Java оператор break находит три применения. Во-первых, как уже было показано, он завершает последовательность операторов в операторе switch. Во-вторых, его можно использовать для выхода из цикла. И, в-третьих, его можно использовать в качестве “цивилизованной” формы оператора безусловного перехода (“goto”). С оператором switch мы уже разобрались поэтому рассмотрим последние два применения.
Оператор break заставляет интерпретатор Java сразу перейти к окончанию составного оператора, в который входит этот оператор break.
После оператора break может стоять метка составного оператора. В таком виде оператор break заставляет интерпретатор Java немедленно выйти из указанного блока, который может быть любым оператором, а не только оператором switch или циклом.
Метка должна быть объявлена до ее использования в операторе break. Метка представляет из себя любой допустимый идентификатор Java заканчивающийся двоеточием (:). Примеры меток:
label1:
loop_01:
Примеры оператора break с меткой:
break label1;
break loop_01;
Ну а теперь рассмотрим несколько примеров…
Оператор break в строке 10 прерывает выполнение цикла for (строка 8) и передает управление на оператор следующий за циклом, то есть на строку 13. Таким образом, что хоть цикл и определен отработать 100 итераций, он ни когда этого не сделает, так как по условию в 9 строке выполнит оператор break. Данный код сгенерирует вот такой вывод:
В случае его использования внутри набора вложенных циклов оператор break осуществляет выход только из самого внутреннего цикла.
В данном коде есть вложенный цикл (строка 18), который, по идее, должен отработать 99 итераций, но такого не случается поскольку срабатывает условие в 18 строке, которое прерывает выполнение внутреннего цикла.
Но это не оказывает ни какого влияния на внешний цикл, который отрабатывает положенные три раза.
Ниже приведен вывод генерируемый данным кодом:
Оператор break можно, так же, использовать и для прерывания любого внешнего цикла, для которого данный оператор break является вложенным. Например, перепишем предыдущий код чуть по другому:
Теперь данный код сгенерирует вот такой вывод:
То есть внешний цикл отработал только один раз, хотя должен был отработать три раза. Это произошло потому, что оператор break в строке 26 прервал выполнение внешнего цикла.
Еще раз напомню что нельзя выполнить переход к какой-либо метке, которая определена не для содержащего данный оператор break блока.
В примере выше, строка 26 и соответственно оператор break входит в блок кода из строк 23-29, но если бы метка определена за пределами этого блока (в данном примере), то программа бы просто даже не откомпилировалась.
Теперь проведем работы по расширению сознания понимания оператора break. И сделаем это на примере следующего кода:
Сразу хочу заметить что идентификаторы меток я сделал на русском языке просто так для разнообразия.
Ну а теперь по самой программе. Оператор break в строке 20 прерывает исполнение блока 01 (строка 9) и передает управление на строку 32, которая следует за блоком 01.
Оператор break в строке 18 прерывает выполнение оператора switch и передает управление на строку 26.
Тут важно уяснить что break прерывает исполнение блока кода (составного оператора). Если метка не указана, то прерывает исполнение блока к которому принадлежит, если метка указана, то прерывает исполнение указанного блока.
Вывод данной программы зависит от количества переданных аргументов в командной строке.
Например:
В первом случае в командной строке не было передано ни одного аргумента, поэтому выполнились все блоки программы с 1 по 3.
Во втором случае был передан один аргумент, поэтому выполнение блока 01 было прервано, и соответственно было прервано выполнение блоков 02 и 03, следовательно не были выведены сообщения из концов данных блоков, а в первом случае они вывелись.
В общем, как уже и говорилось, оператор break можно использовать не только с операторами циклов и switch, но и с любым составным оператором (блоком кода).
Комментариев нет:
Отправить комментарий