Aplikácie Java vyhodnocujú výrazy v kontexte Vyhlásenia, ktoré sa používajú na úlohy, ako je deklarovanie premennej, rozhodovanie alebo opakovanie príkazov. Výrok možno vyjadriť ako jednoduchý alebo zložený výrok:
- A jednoduché vyhlásenie je samostatná samostatná inštrukcia na vykonanie úlohy; musí byť ukončený bodkočiarkou (
;
). - A zložený výpis je postupnosť jednoduchých a iných zložených príkazov nachádzajúcich sa medzi znakmi zloženej zátvorky a zátvorky (
{
a}
), ktoré ohraničujú hranice zloženého výrazu. Zložené príkazy môžu byť prázdne, objavia sa vždy, keď sa objavia jednoduché príkazy, a sú alternatívne známe ako blokov. Zložené vyhlásenie nie je ukončené bodkočiarkou.
V tejto príručke sa dozviete, ako používať príkazy vo vašich programoch Java. Môžete použiť príkazy ako napr ak
, keby-inak
, prepínač
, pre
a zatiaľ čo
deklarovať premenné a špecifikovať výrazy, robiť rozhodnutia, iterovať (alebo opakovať) výpisy, prerušovať a pokračovať v iterácii atď. Niektoré z exotickejších príkazov - napríklad príkazy na vrátenie hodnôt z volaných metód a na vyvolanie výnimiek - nechám pre budúce výukové programy Java 101.
Prepínanie výrazov v prostredí Java 12
Upozorňujeme, že tento výukový program bol aktualizovaný pre verziu Java 12 a obsahuje krátke uvedenie jazyka prepínač
výrazy.
Variabilné vyhlásenia a priradenia
Predtým som predstavil premenné Java a vysvetlil som, že musia byť deklarované pred použitím. Pretože deklarácia premennej je samostatný ostrov kódu, je to vlastne vyhlásenie - a jednoduché vyhlásenie, byť presný. Všetko sú to vyhlásenia o premenných:
int vek = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Názov reťazca;
Deklarácia premennej sa minimálne skladá z názvu typu, voliteľne nasledovaného postupnosťou párov hranatých zátvoriek, nasledovaného názvom, voliteľne nasledovaného sledom párov hranatých zátvoriek, a ukončeného bodkočiarkou. Premenná môže byť tiež explicitne inicializovaná počas jej deklarácie.
Teraz zvážte priraďovací výpis, ktorý úzko súvisí s vyhlásením deklarácie premennej. Príkaz na priradenie priradí premennej hodnotu (pravdepodobne odkaz na pole alebo odkaz na objekt). Tu je niekoľko príkladov:
vek = 30; úroková sadzba = 4,0F; vek + = 10; text [1] = 'A'; text [2] = 'V'; text [3] = 'A'; meno = "John Doe";
Príkaz na zaradenie je príkladom výrazový výraz, čo je výraz, ktorý sa môže použiť ako príkaz, ak za ním nasleduje bodkočiarka. Nasledujúce výrazy sa tiež kvalifikujú ako výrazové výrazy:
- Prírastok (napr.
++ x;
) - Predbežný výrastok (napr.
--y;
) - Prírastok (napr.
x ++;
) - Postdecrement (napr.
y-;
) - Volanie metódou (napr.
System.out.println („ahoj“);
) - Vytváranie objektov (napr.
nový reťazec („ABC“);
)
Deklarácie premenných s jshell
Môžeš použiť jshell
experimentovať s deklaráciami premenných a príkazmi na vyjadrenie. Tu je niekoľko príkladov, ktoré vám pomôžu začať (úvod do prostredia Java Shell nájdete v časti „Naučte sa Java od základu“):
jshell> int age = 25 age ==> 25 jshell> float interest_rate interest_rate ==> 0,0 jshell> char [] text = {'J', 'a', 'v', 'a'} text ==> char [ 4] {'J', 'a', 'v', 'a'} jshell> Názov reťazca name ==> null jshell> age = 30 age ==> 30 jshell> interest_rate = 4.0F interest_rate ==> 4.0 jshell > age + = 10 $ 7 ==> 40 jshell> text [1] = 'A' $ 8 ==> 'A' jshell> text [2] = 'V' $ 9 ==> 'V' jshell> text [3] = 'A' $ 10 ==> 'A' jshell> name = "John Doe" name ==> "John Doe" jshell> text text ==> char [4] {'J', 'A', 'V' , 'A'} jshell> age ++ $ 13 ==> 40 jshell> age age ==> 41
Všimni si vek ++
nezdá sa, že by niečo dosiahol. Tu to vidíte 40
bola priradená premennej scratch $13
. Operátor postincrement však vykoná prírastok po vrátení aktuálnej hodnoty. (V skutočnosti niekam uloží aktuálnu hodnotu, vykoná prírastok a potom vráti uloženú hodnotu.) Zadávanie Vek to dokazuje Vek
obsahuje 41, výsledok operácie po prírastku.
Java Shell poskytuje rôzne príkazy a funkcie, ktoré zjednodušujú prácu s úryvkami. Napríklad / zoznam
príkaz zobrazuje všetky úryvky, ktoré boli zadané v aktuálnej relácii:
jshell> / zoznam 1: int vek = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Názov reťazca; 5: vek = 30 6: úroková sadzba = 4,0 F 7: vek + = 10 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: meno = "John Doe" 12: text 13: vek ++ 14: vek
Číslo v ľavom stĺpci jedinečne identifikuje úryvok. Toto číslo môžete použiť na opätovné vykonanie úryvku, jeho výpis, vypustenie (odstránenie) úryvku atď.:
jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / zoznam 13 13: age ++ jshell> / drop 7 | zrušená premenná $ 7 jshell> / zoznam 1: int vek = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Názov reťazca; 5: vek = 30 6: interest_rate = 4.0 F 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: name = "John Doe" 12 : text 13: vek ++ 14: vek 15: text
Tu sme vstúpili /12 znova vykonať úryvok č. 12, ktorého výstupom je obsah text
. Potom sme vošli / zoznam 13 do zoznamu úryvok # 13, ktorý sa zvyšuje Vek
. Ďalej sme vošli / pokles 7 odstrániť úryvok č. 7 (už nie vek + = 10
úryvok). Nakoniec sme vošli / zoznam znova uviesť všetky úryvky. Všimnite si, že úryvok č. 7 bol odstránený a úryvok č. 15 bol pridaný vďaka /12
príkaz.
Rozhodovanie: ak, keby-ešte, a prepnúť
Vyhlásenia o rozhodnutí nechajte aplikácie zvoliť si medzi viacerými cestami vykonania. Napríklad, ak predajca predá tento mesiac viac ako 500 položiek, poskytnite predajcovi bonus. Ak je známka študenta za test z algebry vyššia ako 85 percent, blahoželáme mu k dobrému výsledku; v opačnom prípade odporučiť, aby sa študent na ďalší test usilovnejšie učil.
Java podporuje ak
, keby-inak
a prepínač
rozhodnutia. Dodatočne nový prepínač
do Javy 12 bola pridaná funkcia výrazov.
Príkaz if
Najjednoduchšie z rozhodovacích výrokov Javy je ak
príkaz, ktorý vyhodnotí booleovský výraz a vykoná ďalší príkaz, keď sa tento výraz vyhodnotí ako pravdivý. The ak
príkaz má nasledujúcu syntax:
ak (Boolovský výraz) vyhlásenie
The ak
vyhlásenie začína rezervovaným slovom ak
a pokračuje s logickým výrazom v zátvorkách, za ktorým nasleduje príkaz na vykonanie, keď sa logický výraz vyhodnotí ako true.
Nasledujúci príklad demonštruje ak
vyhlásenie. Keď Vek
premenná obsahuje hodnotu 55 alebo vyššiu, ak
vykonáva System.out.println (...);
na výstup správy:
if (age> = 55) System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok.");
Mnoho ľudí uprednostňuje zabalenie akéhokoľvek jednoduchého tvrdenia, ktoré nasleduje za ak
príkaz v zložených zátvorkách, ktorý ho efektívne prevedie na ekvivalentný zložený príkaz:
if (vek> = 55) {System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); }
Aj keď zložené zátvorky objasňujú, čo sa vykonáva ak
vyhlásenie, domnievam sa, že odsadenie poskytuje túto jasnosť a že rovnátka nie sú potrebné.
Experimentovanie s príkazmi if
Vyskúšajme tento príklad pomocoujshell
. Reštart jshell
a potom zaviesť Vek
premenná (typu int
), ktorý je inicializovaný na 55
:
jshell> int vek = 55
Ďalej zadajte prvý príklad ak
vyhlásenie (bez zložených zátvoriek obklopujúcich jeho telo):
jshell> if (age> = 55) ...> System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); Máte alebo ste mali nárok na predčasný dôchodok. jshell>
Všimnite si, že jshell>
rýchle zmeny ...>
výzva na pokračovanie po zadaní úryvku viacerých riadkov. Lisovanie Zadajte po spôsobení posledného riadku úryvku jshell
okamžite vykonať úryvok.
Vykonať / zoznam zoznam všetkých úryvkov. Poznamenávam, že ak
úryvok z výpisu bol priradený 2
v mojej relácii. Vykonávanie /2 príčiny jshell
vypísať a potom vykonať tento úryvok a rovnaká správa sa odošle.
Teraz predpokladajme, že zadáte 25
do Vek
a potom znova vykonajte /2 (alebo ekvivalentné číslo úryvku vo vašej relácii). Tentokrát by ste nemali sledovať správu na výstupe.
Príkaz if-else
The keby-inak
príkaz vyhodnotí booleovský výraz a vykoná príkaz. Vykonaný príkaz závisí od toho, či je výraz vyhodnotený ako pravdivý alebo nepravdivý. Tu je syntax pre keby-inak
vyhlásenie:
ak (Boolovský výraz) vyhlásenie1 inak vyhlásenie2
The keby-inak
vyhlásenie je podobné ako ak
vyhlásenie, ale obsahuje vyhradené slovo inak
, za ktorým nasleduje príkaz na vykonanie, keď je boolovský výraz nepravdivý.
Nasledujúci príklad demonštruje keby-inak
vyhlásenie, ktoré hovorí niekomu, kto má menej ako 55 rokov, koľko rokov zostáva do predčasného dôchodku:
if (age> = 55) System.out.println ("Máte alebo ste mali nárok na predčasný dôchodok."); else System.out.println ("Máte" + (55 - vek) + "rokov do predčasného dôchodku.");
Podmienený operátor vs ak-iný
Podmienený operátor (?:
) je podobný ako keby-inak
vyhlásenie. Tento operátor však nemožno použiť na vykonávanie alternatívnych príkazov. Namiesto toho môže vrátiť iba jednu z dvoch hodnôt rovnakého typu. (Podmienený operátor sa tiež niekedy nazýva ternárny operátor.)
Reťazenie príkazov if-else
Java vám umožňuje reťaziť viac keby-inak
spoločné príkazy pre situácie, keď je potrebné zvoliť jeden z viacerých príkazov na vykonanie:
ak (Boolovský výraz1) vyhlásenie1 ináč Ak (Boolovský výraz2) vyhlásenie2 iné ... iné vyhlásenieN
Reťazenie funguje vykonaním následného keby-inak
vyhlásenie kedykoľvek aktuálne ak
Boolovský výraz príkazu sa vyhodnotí ako nepravdivý. Zvážte ukážku:
if (teplota 100,0) System.out.println ("var"); else System.out.println ("normálne");
Prvý keby-inak
vyhlásenie určuje, či teplota
hodnota je záporná. Ak je to tak, vykoná sa System.out.println ("zmrazenie");
. Ak nie, vykoná sekundu keby-inak
vyhlásenie.
Druhy keby-inak
vyhlásenie určuje, či teplota
Hodnota je väčšia ako 100. Ak áno, vykoná sa System.out.println ("vriaci");
. V opačnom prípade sa vykoná System.out.println ("normálne");
.
Problém visiaceho iného
Kedy ak
a keby-inak
sa používajú spoločne a zdrojový kód nie je správne odsadený, môže byť ťažké určiť, ktorý z nich ak
spoločníci s inak
. Problém vidíte v kóde nižšie:
int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 a y> 0"); else System.out.println ("x <= 0");
Asi by ste čakali, že uvidíte x <= 0
ako výstup z tohto kódu, ale nikdy sa to nestane; namiesto toho sa nič nebude zobrazovať. Problém je v tom, že inak
sa zhoduje s najbližšou hodnotou ak
, ktorý je ak (y> 0)
. Preformátovaním kódu sa objasní, čo sa deje:
int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 a y> 0"); else System.out.println ("x <= 0");
Tu je to jasnejšie ako if (y> 0) ... else ...
keby-inak
vyhlásenie nasleduje po if (x> 0)
vyhlásenie. Aby ste zodpovedali zámeru predchádzajúceho príkladu, musíte dookola zaviesť zložené znaky ak (y> 0)
a jeho následné vyjadrenie. V zásade bude nasledovať blok if (x> 0)
:
int x = 0; int y = 2; if (x> 0) {if (y> 0) System.out.println ("x> 0 a y> 0"); } else System.out.println ("x <= 0");
Pretože x> 0
vyhodnotí ako nepravdivé, System.out.println ("x <= 0");
vykonáva. The inak
vyhradené slovo zreteľne zodpovedá až if (x> 0)
.
Prepínač
Ak si potrebujete vybrať medzi niekoľkými cestami vykonania, použije sa príkaz prepínač
vyhlásenie ponúka efektívnejšiu alternatívu k reťazeniu. Pozrite sa na prepínač
vyhlásenie:
prepínač (výraz selektora) {prípad hodnota1: vyhlásenie1 [break;] prípad hodnota2: vyhlásenie2 [prestávka;] ... prípad hodnotaN: vyhlásenieN [break;] [predvolené: vyhlásenie] }
The prepínač
vyhlásenie začína rezervovaným slovom prepínač
a pokračuje písmenom výraz selektora ktorý vyberie jeden z nasledujúcich prípadov alebo predvolený prípad, ktorý sa má vykonať. Selektorový výraz sa vyhodnotí ako celé číslo, znak alebo reťazec.
Konštanty switch a enum
Selektorový výraz sa dá vyhodnotiť aj na enum
konštantný. Predstavím enum
s v budúcom tutoriáli.
Každý prípad označuje príkaz, ktorý sa má vykonať. Prípad sa začína rezervovaným slovom prípade
a hodnotu, ktorá označí prípad. Po dvojbodke (:
) znak je príkaz, ktorý sa má vykonať. Za príkazom môže prípadne nasledovať prestávka;
, na prevedenie exekúcie na prvý výpis po prepínač
. Ak sa žiaden z označení prípadov nezhoduje s hodnotou výrazu selektora, voliteľný predvolený veľký prípad, ktorý začína vyhradeným slovom predvolené
, vykoná.
Nižšie je a prepínač
príkaz používaný na určenie, či je celočíselná hodnota párna alebo nepárna (pomocou operátora zvyšku). Potom odošle príslušnú správu cez prípad, ktorého štítok sa zhoduje so zvyškom:
int i = 27; switch (i% 2) {case 0: System.out.println ("even"); prestávka; prípad 1: System.out.println ("nepárny"); }