Главная » Java » break Java

0

Инструкция break применяется для завершения выполнения кода любого блока (не только выражения switch). Существуют две формы инструкции – безымянная:

break;

и именованная:

break метка;

Безымянная команда break прерывает выполнение кода конструкций switch, for, whilе или do и может использоваться только внутри этих конструкций. Команда break в именованной форме способна приостановить выполнение любой инструкции, снабженной соответствующей меткой.

Команда break чаще всего используется для принудительного выхода из тела цикла. Рассмотрим пример метода, в котором предусмотрен поиск первого пустого элемента в массиве ссылок на объекты типа Contained:

class Container {

private Contained[] objs;

 // …

public void addIn(Contained obj)

throws NoEmptySlotException  

{

int i;

for (; = о; i < objs.length; i++)

 if (objs[i] == null)

break;

if (i >= objs.length)

throw new NoEmptySlotException ();

                 objs[i] = obj;                 // Сохранение переданной ссылки в массиве

obj.inside(this);            // Сохранение в объекте-элементе массива

 

// ссылки на текущий объект

}

}

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

private float[][] matrix;

public boolean workOnFlag(float flag) {

int у, х;

boolean found = false;

search:

for (у = о; у < matrix.length; у++) {

for (х = о; х < matrix[y].length; х++) {

if (matrix[y][x] == flag) {

found = true;

break search;

}

}

}

if (! found)

return false;

// А здесь найденное значение matrix[y][x]

// как-то обрабатывается

return true;

}

Как вы видите, меткой search обозначен внешний цикл; как только условие в теле внутреннего цикла удовлетворяется (т.е. отыскивается элемент массива с заданным значением), выполнение обоих циклов прерывается посредством именованной команды break. Такой подход позволяет упростить код за счет исключения дополнительного условия  found в логическом выражении внешнего цикла.

Целесообразно ли пользоваться метками всегда – этот вопрос относится к сфере личных предпочтений программиста. Применение меток в совокупности с командами break можно считать неплохой защитной мерой против возможных небрежных действий будущего пользователя, который, не ровен час, вознамерится поместить ваш код внутрь собственной конструкции switch, whilе или for, не предприняв при этом никаких дополнительных действий.

Заметьте, именованная Инструкция break – это вовсе не то же самое, что печально знаменитая команда goto. Инструкция goto разрешает "прыгать" по коду без каких-либо ограничений, перепутывая порядок вычислений и сбивая читателя с толку. Команды же break и continue, ссылающиеся на метку, позволяют всего лишь аккуратно покинуть соответствующий блок или обеспечить его повторение, и поток вычислений остается при этом вполне очевидным. ниже приведена исправленная версия метода workOnFlag, в которой меткой обозначен не цикл, а блок, что дает возможность избавиться от логической переменной

found вовсе.

private float[][] matrix;

public boolean workOnFlag(float flag) {

int. у, х;

boolean found = false;

           

search:

            {

                        for(y = 0; y< matrix.length; y++) {

 

                                   for(x = 0; x<matrix[y].length;x++) {

                                              

                                               if(matrix[y][x] == flag)

                                               break search;

                                   }

                        }

            }

            //          Коль скоро мы находимся в этом месте кода,

            //          Значит, элемент не найден

            return false;

}

//          А здесь найденное значение matrix[y][x]

// как-то обрабатывается

return true;

}

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии