3 мая 2015 г.

Оператор break

С оператором 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;

Ну а теперь рассмотрим несколько примеров…

B00001

Оператор break в строке 10 прерывает выполнение цикла for (строка 8) и передает управление на оператор следующий за циклом, то есть на строку 13. Таким образом, что хоть цикл и определен отработать 100 итераций, он ни когда этого не сделает, так как по условию в 9 строке выполнит оператор break. Данный код сгенерирует вот такой вывод:

B00002

 

В случае его использования внутри набора вложенных циклов оператор break осуществляет выход только из самого внутреннего цикла.

B00003

В данном коде есть вложенный цикл (строка 18), который, по идее, должен отработать 99 итераций, но такого не случается поскольку срабатывает условие в 18 строке, которое прерывает выполнение внутреннего цикла.

Но это не оказывает ни какого влияния на внешний цикл, который отрабатывает положенные три раза.

Ниже приведен вывод генерируемый данным кодом:

B00004

Оператор break можно, так же, использовать и для прерывания любого внешнего цикла, для которого данный оператор break является вложенным. Например, перепишем предыдущий код чуть по другому:

B00005

Теперь данный код сгенерирует вот такой вывод:

B00006

То есть внешний цикл отработал только один раз, хотя должен был отработать три раза. Это произошло потому, что оператор break в строке 26 прервал выполнение внешнего цикла.

Еще раз напомню что нельзя выполнить переход к какой-либо метке, которая определена не для содержащего данный оператор break блока.

В примере выше, строка 26 и соответственно оператор break входит в блок кода из строк 23-29, но если бы метка определена за пределами этого блока (в данном примере), то программа бы просто даже не откомпилировалась.

Теперь проведем работы по расширению сознания понимания оператора break. И сделаем это на примере следующего кода:

B00007

Сразу хочу заметить что идентификаторы меток я сделал на русском языке просто так для разнообразия.

Ну а теперь по самой программе. Оператор break в строке 20 прерывает исполнение блока 01 (строка 9) и передает управление на строку 32, которая следует за блоком 01.

Оператор break в строке 18 прерывает выполнение оператора switch и передает управление на строку 26.

Тут важно уяснить что break прерывает исполнение блока кода (составного оператора). Если метка не указана, то прерывает исполнение блока к которому принадлежит, если метка указана, то прерывает исполнение указанного блока.

Вывод данной программы зависит от количества переданных аргументов в командной строке.

Например:

B00008

В первом случае в командной строке не было передано ни одного аргумента, поэтому выполнились все блоки программы с 1 по 3.

Во втором случае был передан один аргумент, поэтому выполнение блока 01 было прервано, и соответственно было прервано выполнение блоков 02 и 03, следовательно не были выведены сообщения из концов данных блоков, а в первом случае они вывелись.

В общем, как уже и говорилось, оператор break можно использовать не только с операторами циклов и switch, но и с любым составным оператором (блоком кода).

Комментариев нет:

Отправить комментарий