switch (expresie) {
case valoare_1: secvență_1
[break;]
case valoare_2: secvență_2
[break;]
..........................
case valoare_N: secvență_N
[default: secvență ]
}
în care:
- switch, case si default sunt cuvinte cheie
ale limbajului Java;
- expresie este o expresie de tip byte, short, int sau char;
- valoare este fie un literal de tip byte, short, int
sau char, fie o expresie constantă de tip int,
adică o expresie care conține numai literali sau variabile
finale din tipurile menționate;
- secvențaeste o secvență de instrucțiuni simple sau structurate;
- parantezele drepte roșii []nu apar în
program, ci indică faptul că conținutul lor este opțional (poate sa
lipsească).
În limba engleză, switch înseamnă comutator. Conform acestei forme generale, după cuvantul cheie switch, există o expresie de tip int sau compatibilă cu aceasta (deci poate fi și de tip char, byte sau short, dar nu de tip long), a cărei valoare servește drept "comutator". Se deschide apoi acolada corpului instrucțiunii, în care există mai multe "cazuri". Fiecare "caz" începe prin cuvantul cheie case, urmat de o valoare de tip întreg, după care apar una sau mai multe instrucțiuni (simple sau compuse) și opțional intrucțiunea break. După ce s-au epuizat toate cazurile, opțional se poate scrie cuvântul cheie default urmat de una sau mai multe instrucțiuni. La sfârșit, se închide acolada corpului instrucțiunii switch.
Executarea instrucțiunii switch decurge astfel: se evaluează mai întâi expresie și se obține o valoare de tip întreg, care servește drept comutator. Această valoare se compară, pe rând de sus în jos, cu fiecare din valorile indicate după cuvintele cheie case, până când se găsește prima valoare care coincide cu cea a comutatorului. Dacă s-a găsit o astfel de valoare, se execută toate instrucțiunile care încep de la cazul respectiv, până la prima instrucțiune break întalnită sau, în lipsa acesteia, până la acolada de închidere a corpului instrucțiunii switch. Dacă însă nici unul din cazuri nu conține valoarea potrivită a comutatorului, atunci se execută instrucțiunile care urmează după cuvântul cheie default sau, în lipsa acestuia, nu se execută nimic.
Exemplu
În fișierul TestSwitch.java se dă
programul de mai jos, în care se testează instrucțiunea switch în două
situații: în primul caz nu este utilizată instrucțiunea break, iar în al
doilea caz este pusă această instrucțiune la sfârșitul secvenței de
instrucțiuni corespunzătoare fiecărui caz. Remarcăm, de asemenea, că în
al doilea caz, întrucât comutatorul este de tip char, valorile numerice
corespunzătoare fiecărui caz au trebuit să se încadreze în acest tip,
adică să fie caractere sau numere întregi pozitive în intervalul [0,
65535].
/* Testarea instructiunii switch */
class TestSwitch { } |
Rezultatul rulării acestui program este următorul:
Switch fara break si cu cazuri vide C 14.3782 D 7.3782 E 51.6474 F 2.6473999999999975 G 15.3782 Switch cu break dupa fiecare caz nevid D 8.3782 |
Se observă cu ușurință că, în primul caz (fără instrucțiuni break),
s-a început executarea secvenței de instrucțiuni în punctul "case 7"
și s-a continuat până la sfârșitul blocului instrucțiunii switch (inclusiv
cazul default). Când s-a folosit instrucțiunea break,
ieșirea s-a făcut la întalnirea acestei instrucțiuni.