Оператори переходу

Оператори переходу

Java підтримує три оператора переходу - break, continue і return. Вони передають управління в іншу частину вашої програми. Розглянемо кожен з операторів докладно.

Використання оператора break


Оператор break в Java використовується в трьох випадках. По-перше, як ви вже бачили, він закінчує послідовність операторів в гілках оператора switch. По-друге, його можна використовувати для виходу з циклу. По-третє, він може застосовуватися як «цивілізована» форма оператора безумовного переходу goto. У цьому розділі пояснюються два останніх випадки.
Використання break для виходу з циклу
Використовуючи break. ви можете спробувати примусово негайне завершення циклу, обходячи умовний вираз і будь-який залишається код в тілі циклу. Коли оператор break зустрічається всередині циклу, другий закінчується і програмне керування передається оператору, наступному за ним.
Простий приклад:

Ця програма генерує наступний висновок:

Хоча цикл for розроблений тут для виконання своїх операторів від 0 до 99 раз, оператор break змушує його завершитися раніше, коли i дорівнює 4.
Оператор break може використовуватися з будь-яким з циклів Java, включаючи навмисно нескінченні цикли. Наприклад, нижче показана попередня програма, закодована за допомогою циклу while. Висновок цієї програми такий же, як у її попередниці.

При використанні всередині набору вкладених циклів оператор break виходитиме тільки з самого внутрішнього циклу.
наприклад:

Ця програма генерує наступний висновок:

Як ви бачите, оператор break у внутрішньому циклі викликає завершення тільки цього циклу. Зовнішній цикл не зачіпається. Зробимо ще два зауваження щодо break. По-перше, в циклі може з'явитися кілька операторів break. Однак будьте обережні. Занадто велика їх кількість створює тенденцію до деструктуризации вашого коду. По-друге, break. який завершує оператор switch. впливає тільки на даний switch-оператор (але не на що включають його цикли).

зауваження:
Break НЕ проектувався як нормального кошти завершення циклу. Цю мету обслуговує умовний вираз заголовка циклу. Оператор break слід використовувати для переривання циклу тільки тоді, коли виникають деякі спеціальні ситуації.

Використання break як форми goto


На додаток до застосування в операторах switch і циклах break можна також використовувати окремо, як «цивілізованої» форми оператора goto. Java не містить оператора goto. тому що він виконує перехід довільним і неструктурованих способом. Код, інтенсивно використовує goto. зазвичай важко зрозуміти і підтримувати. Він також скасовує деякі оптимізації компілятора. Існує, однак, кілька місць в програмі, де goto - цінна і правова система управління потоком виконання. Наприклад, goto може бути корисний, коли ви виходите з глибоко вкладеного набору циклів. Щоб обробляти такі ситуації, Java визначає розширену форму оператора break. Використовуючи її, ви можете вийти з одного або більшої кількості блоків коду. Цим блокам не потрібно бути частиною циклу або оператора switch. Це може бути будь-який блок. Далі, ви можете визначити точно, де виконання буде продовжено, тому що дана форма break працює з міткою і забезпечує переваги goto. минаючи його проблеми. Оператор break з міткою має таку загальну форму:
break label;
Тут label - ім'я мітки, яка ідентифікує деякий блок коду. Коли ця форма break виконується, управління передається з іменованого блоку коду (чия мітка вказана в операторі break) на наступний за цим блоком оператор. Позначений блок коду обов'язково повинен включати даний оператор break. але не потрібно, щоб це включення було безпосереднім (т. е. break може не включатиметься прямо в блок зі своєю міткою, а у вкладений в нього блок, можливо, теж позначений). Це означає, що ви можете використовувати позначений оператор break. щоб вийти з набору вкладених блоків. Але ви не маєте можливості використовувати break для передачі управління блоку коду, який не включає оператор break.
Для іменування блоку помістіть мітку в його початку (перед відкриває блок фігурною дужкою). Мітка - це будь-який допустимий ідентифікатор Java, за яким слідує двокрапка. Після маркування блоку, його мітку можна використовувати як аргумент оператора break. Це призведе до того, що виконання буде продовжено з кінця поміченого блоку. Наприклад, наступна програма містить три вкладених блоку, причому кожен має свою власну мітку. Оператор break здійснює перехід вперед, за кінець блоку, маркованого міткою second. пропускаючи два оператора println ().

Виконання цієї програми генерує наступний висновок:
Перед оператором break.
Даний оператор розміщений після блоку second.

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

Програма генерує наступний висновок:


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

Так як цикл, позначений як one, не включає оператор break. передати управління цього блоку неможливо.

Використання оператора continue


Іноді корисно почати чергову ітерацію циклу раніше. Тобто потрібно продовжити виконання циклу, але припинити обробку залишку коду в його тілі для даної приватної ітерації. Насправді це - goto-перехід повз наступних операцій тіла в кінець блоку циклу. Така дія виконує оператор continue. У циклах while і do while оператор continue викликає передачу управління безпосередньо умовного виразу, яке управляє циклом. У циклі for управління переходить спочатку до ітераційної частини оператора for і потім до умовного виразу. Для всіх трьох циклів будь-який проміжний код обходиться.
Приклад програми, яка використовує continue для друку двох чисел на кожному рядку, наведено нижче:

Цей код використовує операцію% (залишок по модулю), щоб перевіряти, чи є i парних. Якщо це так, цикл триває без друку символу нового рядка (newline).
Висновок програми:


Як і в операторі break. в continue можна визначити мітку, яка вказує, який включає цикл слід продовжити. Приклад програми, яка використовує continue для друку трикутної таблиці множення від 0 до 9.

Оператор continue в цьому прикладі завершує цикл, який обчислює j, і продовжує з наступної ітерації циклу, керованого i. Висновок цієї програми:


У використанні continue корисний вкрай рідко. Одна з причин цього полягає в тому, що Java забезпечує багатий набір операторів циклу, які влаштовують більшість додатків. Однак, для тих спеціальних ситуацій, в яких необхідно дострокове припинення ітерації, оператор continue забезпечує структурний спосіб виконання цього завдання.

оператор return

Тут return виконує повернення до Java-системі під час виконання, т. К. Саме ця система викликає метод main ().

Висновок цієї програми:

Можна помітити, що заключний оператор println () не виконується. У момент виконання return управління передається назад в зухвалу програму.
І останнє зауваження. У попередній програмі оператор if (t) необхідний. Без нього Java-компілятор видав би помилку «недосяжний код», тому що він знав би, що останній оператор println () ніколи не буде виконуватися. Щоб запобігти зазначену помилку, якраз і використовується оператор if (t) він обманює компілятор заради даної демонстрації.

Схожі статті