Operatori de tranziție
Java suportă trei operatori de salt, pauză, continuă și se întoarce. Ei transferă controlul către o altă parte a programului. Să luăm în considerare fiecare dintre operatori în detaliu.
Folosind instrucțiunea break
Instrucțiunea de pauză din Java este utilizată în trei cazuri. Mai întâi, așa cum ați văzut, termină secvența de instrucțiuni din ramurile instrucțiunii comutatorului. În al doilea rând, poate fi folosit pentru a ieși din bucla. În al treilea rând, poate fi folosit ca formă "civilizată" a operatorului go-goo necondiționat. Această secțiune explică ultimele două cazuri.
Folosiți pauza pentru a ieși din bucla
Utilizarea pauzei. puteți forța finalizarea imediată a buclei, ocolind expresia condiționată și orice cod rămas în corpul bucla. Când o declarație de pauză are loc într-o buclă, al doilea se termină și comanda de program este transmisă operatorului care o urmează.
Un exemplu simplu:
Acest program generează următoarea ieșire:
Deși for loop-ul este proiectat aici pentru a-și rula operatorii de la 0 la 99 de ori, declarația de pauză o fortează să se termine mai devreme când i este 4.
Instrucțiunea de pauză poate fi utilizată cu oricare dintre buclele Java, inclusiv bucle infinite intenționat. De exemplu, mai jos este prezentat programul anterior, codificat cu un buclă. Concluzia acestui program este aceeași cu cea a predecesorului său.
Când este utilizat într-un set de bucle imbricate, instrucțiunea de pauză va ieși din bucla cea mai interioară.
De exemplu:
Acest program generează următoarea ieșire:
După cum puteți vedea, instrucțiunea de pauză din buclă interioară provoacă numai finalizarea acestei buclă. Bucla exterioară nu este afectată. Să mai facem două remarci cu privire la pauză. Mai întâi, într-o buclă, pot apărea mai multe declarații de pauză. Dar fii atent. Prea mulți dintre ei creează o tendință de a vă distruge codul. În al doilea rând, rupeți. care completează instrucțiunea de comutare. afectează numai acest operator de comutare (dar nu pe ciclurile care îl includ).
observaţie:
Pauza nu a fost concepută ca un mijloc normal de a finaliza un ciclu. Acest scop servește expresiei condiționate a antetului buclă. Instrucțiunea de rupere trebuie utilizată pentru a întrerupe buclele numai atunci când apar situații speciale.
Folosirea pauzei ca formular
Pe lângă faptul că este folosit în declarații de comutare și pauze, pauza poate fi utilizată separat, ca formă "civilizată" a instrucțiunii geto. Java nu conține gata. deoarece efectuează tranziția într-un mod arbitrar și nestructurat. Codul pe care îl folosește foarte mult. este de obicei dificil de înțeles și de sprijin. De asemenea, suprapune unele optimizări ale compilatoarelor. Există, totuși, mai multe locuri în cadrul programului în care geto este un design valoros și legitim al controlului fluxului. De exemplu, geto poate fi util atunci când ieșiți dintr-un set de bucle profund imbricate. Pentru a rezolva astfel de situații, Java definește o formă extinsă a instrucțiunii de pauză. Folosindu-l, puteți ieși din unul sau mai multe blocuri de cod. Aceste blocuri nu trebuie să facă parte dintr-o declarație de buclă sau switch. Poate fi orice bloc. Apoi, puteți determina exact unde va continua execuția, deoarece această formă de pauză funcționează cu o etichetă și oferă avantajele obținute. ocolind problemele sale. Instrucțiunea de rupere cu o etichetă are următoarea formă generală:
eticheta de spargere;
Eticheta de aici este numele etichetei care identifică un anumit bloc de cod. Atunci când această formă de pauză este executată, controlul este transferat de la blocul de cod numit (a cărui etichetă este specificată în instrucțiunea break) la instrucțiunea care urmează blocului. Un bloc de cod marcat trebuie să includă această instrucțiune de pauză. dar nu este necesar ca această includere să fie imediată (adică, pauza nu poate fi inclusă direct în bloc cu eticheta sa, ci în blocul inclus în ea, eventual, de asemenea, etichetat). Aceasta înseamnă că puteți utiliza instrucțiunea marcată pauză. pentru a ieși din setul de blocuri imbricate. Dar nu puteți folosi pauza pentru a trece controlul la un bloc de cod care nu include o declarație de pauză.
Pentru a numi un bloc, așezați o etichetă la începutul blocului (înainte de blocul de deschidere cu o cremalieră). O etichetă este orice identificator Java valid, urmat de un colon. După marcarea unui bloc, eticheta sa poate fi folosită ca argument pentru declarația de pauză. Acest lucru va determina continuarea execuției de la sfârșitul blocului marcat. De exemplu, următorul program conține trei blocuri imbricate, fiecare având o etichetă proprie. Instrucțiunea de pauză se deplasează înainte, la sfârșitul blocului marcat cu a doua etichetă. sărind două declarații println ().
Rularea acestui program generează următoarea ieșire:
Înainte de declarația de pauză.
Acest operator este plasat după al doilea bloc.
Una dintre cele mai frecvente utilizări pentru o declarație de pauză etichetată este ieșirea din bucle imbricate. De exemplu, în următorul program, bucla externă este executată o singură dată:
Programul generează următoarea ieșire:
Nu este greu de observat că atunci când bucla internă este întreruptă, ambele cicluri se termină înainte de sfârșitul bucla exterioară.
Rețineți că nu puteți efectua o tranziție la orice etichetă care nu este definită pentru blocul de închidere. De exemplu, următorul program este nevalid și nu se va compila:
Deoarece o buclă marcată ca una nu include o declarație de pauză. Este imposibil să transferați controlul la această unitate.
Folosind instrucțiunea continuă
Uneori este util să pornim mai devreme iterația următoare a ciclului. Aceasta înseamnă că trebuie să continuați executarea buclei, dar opriți procesarea restului codului în corpul său pentru această iterație. De fapt, trecerea de la următoarea operație a corpului la sfârșitul blocului de buclă este trecătoare. Această acțiune este efectuată de instrucțiunea continuă. În timp și în timp, în bucle, instrucțiunea continuă face ca controlul să fie transmis direct expresiei condiționale care controlează bucla. În buclă for, controlul trece mai întâi la partea de iterație a instrucțiunii for și apoi la expresia condiționată. Pentru toate cele trei cicluri, orice cod intermediar este ocolit.
Un exemplu de program care utilizează continuă imprimarea a două numere pe fiecare linie este prezentat mai jos:
Acest cod folosește operația% (modulo) pentru a verifica dacă este egal. În acest caz, bucla continuă fără a imprima un caracter de linie nouă.
Ieșirea programului:
Ca și în declarația de pauză. în continuare, puteți defini o etichetă care să indice ce ciclu în desfășurare trebuie continuat. Un exemplu de program care folosește continuă să imprime o masă triunghiulară de multiplicare de la 0 la 9.
Instrucțiunea continuă din acest exemplu completează bucla care calculează j și continuă cu iterația următoare a buclăi controlată de i. Rezultatul acestui program:
În utilizarea continuă este extrem de utilă. Unul dintre motivele pentru aceasta este faptul că Java oferă un set bogat de operatori de buclă care se potrivește majorității aplicațiilor. Cu toate acestea, pentru acele situații speciale în care este necesară o iterație, operatorul continuu oferă o modalitate structurală de a îndeplini această sarcină.
Declarație de retur
Aici, întoarcerea se întoarce la sistemul Java la momentul executării, deoarece acest sistem apelează metoda principal ().
Rezultatul acestui program:
Puteți vedea că declarația finală println () nu este executată. La momentul executării, controlul întoarcerii este transferat înapoi la programul apelant.
Și ultima remarcă. În programul anterior, operatorul if (t) este necesar. Fără aceasta, compilatorul Java ar produce o eroare de cod "inaccesibil", deoarece ar ști că ultima instrucțiune println () nu va fi executată niciodată. Pentru a preveni această eroare, dacă operatorul if (t) este utilizat, acesta înșeală compilatorul de dragul acestei demonstrații.