В Java, в отличие от языка С++, нет инструкции перехода goto(). Тем не менее в Java могут использоваться метки. Обычно для этого применяют инструкции break() и continue().
С инструкцией break() мы уже сталкивались. В общем случае она завершает ра- боту инструкции цикла или инструкции выбора. Если после инструкции break() указать метку, то управление передается команде, размещенной за помеченной этой меткой инструкцией цикла, выбора или блоком команд (напомним, блок команд заключается в фигурные скобки).
Инструкция continue() используется для завершения текущего цикла в инструк- ции цикла и переходу к выполнению следующего цикла. Если после инструк- ции continue() указать метку, то выполняется переход для выполнения итерации помеченного меткой внешнего цикла. Таким образом, инструкция continue() с меткой применяется только тогда, когда имеются вложенные циклы.
Что касается непосредственно меток, то в качестве метки применяется иден- тификатор, который не может начинаться с цифры, заканчивается двоеточием и предназначен для выделения места в программном коде. Никакого дополни- тельного описания метка не требует.
Пример использования меток приведен в листинге 2.13.
В программе имеется блок из вложенных инструкций цикла. В каждом цикле индексная переменная пробегает значения от 1 до 100 включительно. Внешняя инструкция цикла помечена меткой MyLabel.
В теле внутреннего цикла размещено три условных инструкции и команда System.out.println(i+":"+j), предназначенная для вывода текущих значений ин- дексных переменных i и j для вложенных инструкций цикла. В первой услов- ной инструкции проверяется условие i!=j. Если индексные переменные прини- мают разные значения, командой continue досрочно завершается текущий цикл внутренней инструкции. В результате действия такого «фильтра» на экран вы- водятся только одинаковые значения индексных переменных, да и то не все. Преградой служат вторая и третья условные инструкции. Так, во второй услов- ной инструкции проверяется условие (j%3==0)||(i%2==0). Оно истинно, если ин- дексная переменная j делится на 3 или индексная переменная i делится на 2. В этом случае командой break досрочно завершает работу внутренняя инструкция цикла. Внешняя индексная переменная увеличивается на единицу, и внутренняя инструкция цикла запускается снова. Наконец, если выполнено условие i+j>20 (третья условная инструкция), командой break MyLabel выполняется досрочное завершение блока команд, помеченных меткой MyLabel, то есть в данном случае завершается работа внешней инструкции цикла. Результат выполнения про- граммы имеет вид:
1:1
5:5
7:7
На экран выводятся пары одинаковых индексов, которые не делятся на 3 и 2 и сумма которых не превышает 20.