Aplikacije Java vrednotijo izraze v kontekstu izjave, ki se uporabljajo za naloge, kot je razglasitev spremenljivke, odločanje ali ponavljanje stavkov. Izjavo lahko izrazimo kot preprosto ali sestavljeno izjavo:
- A preprosta izjava je eno samostojno navodilo za izvajanje naloge; končati mora biti s podpičjem (
;
). - A sestavljena izjava je zaporedje enostavnih in drugih sestavljenih stavkov, ki se nahajajo med odprtimi in zaklenjenimi znaki (
{
in}
), ki omejujejo meje sestavljenega stavka. Sestavljeni stavki so lahko prazni, pojavljajo se povsod, kjer se pojavijo preprosti stavki, in so tudi znani kot bloki. Sestavljeni stavek se ne konča s podpičjem.
V tej vadnici boste izvedeli, kako uporabljati stavke v svojih programih Java. Uporabite lahko izjave, kot so če
, če potem
, stikalo
, za
, in medtem
za razglasitev spremenljivk in določanje izrazov, sprejemanje odločitev, ponovitev (ali zanko) nad stavki, prekinitev in nadaljevanje ponovitve in še več. Nekatere bolj eksotične izjave - na primer izjave za vrnitev vrednosti iz klicanih metod in metanje izjem - bom pustil za prihodnje vaje Java 101.
Preklopi izraze v Javi 12
Upoštevajte, da je bila ta vadnica posodobljena za Javo 12 in vključuje kratek uvod v stikalo
izrazi.
Izjave spremenljivk in dodelitve
Pred tem sem predstavil spremenljivke Java in pojasnil, da jih je treba pred uporabo deklarirati. Ker je izjava spremenljivke samostojni otok kode, je dejansko izjava - a preprosta izjava, če smo natančni. Vse to so stavki deklaracije spremenljivk:
int starost = 25; plavajoča obrestna mera; char [] besedilo = {'J', 'a', 'v', 'a'}; Ime niza;
Deklaracija spremenljivke je minimalno sestavljena iz imena tipa, ki mu neobvezno sledi zaporedje parov kvadratnih oklepajev, čemur sledi ime, po želji zaporedje parov kvadratnih oklepajev in se zaključi s podpičjem. Spremenljivka se lahko tudi izrecno inicializira med njeno deklaracijo.
Zdaj razmislite o izjava o dodelitvi, ki je tesno povezano s stavkom deklaracije spremenljivke. Stavek o dodelitvi spremenljivki dodeli vrednost (morda sklic na matriko ali sklic na objekt). Tu je nekaj primerov:
starost = 30; obrestna mera = 4.0F; starost + = 10; besedilo [1] = 'A'; besedilo [2] = 'V'; besedilo [3] = 'A'; name = "John Doe";
Stavek o dodelitvi je primer izraz izraza, kar je izraz, ki se lahko uporabi kot stavek, če mu sledi podpičje. Naslednji izrazi so prav tako opredeljeni kot izrazi izrazov:
- Preinkrement (npr.
++ x;
) - Predhodno zmanjšanje (npr.
- y;
) - Postinkrement (npr.
x ++;
) - Pomanjšanje (npr.
y--;
) - Klic metode (npr.
System.out.println ("Pozdravljeni");
) - Ustvarjanje predmetov (npr.
nov niz ("ABC");
)
Izjave spremenljivk z jshell
Lahko uporabiš jshell
eksperimentirati z deklaracijami spremenljivk in stavki izrazov. Tu je nekaj primerov za začetek (za uvod v lupino Java glejte "Učenje Jave od temelja"):
jshell> int age = 25 age ==> 25 jshell> float interes_rate rate_rate ==> 0.0 jshell> char [] text = {'J', 'a', 'v', 'a'} text ==> char [ 4] {'J', 'a', 'v', 'a'} jshell> Ime niza ime ==> null jshell> starost = 30 starost ==> 30 jshell> obrestna mera = 4.0F stopnja obresti ==> 4.0 jshell > starost + = 10 $ 7 ==> 40 jshell> besedilo [1] = 'A' $ 8 ==> 'A' jshell> besedilo [2] = 'V' $ 9 ==> 'V' jshell> besedilo [3] = 'A' $ 10 ==> 'A' jshell> name = "John Doe" name ==> jshell "John Doe"> text text ==> char [4] {'J', 'A', 'V' , 'A'} jshell> starost ++ $ 13 ==> 40 jshell> starost ==> 41
Opazite to starost ++
se zdi, da ni ničesar dosegel. Tukaj vidite 40
je bila dodeljena spremenljivki prask $13
. Vendar operator postinkrementa izvede prirastek po vrnitvi trenutne vrednosti. (Pravzaprav nekje shrani trenutno vrednost, izvede prirastek in nato shrani shranjeno vrednost.) Vnos starost to dokazuje starost
vsebuje 41, rezultat operacije postinkrementa.
Lupina Java ponuja različne ukaze in funkcije, ki poenostavljajo delo z delčki. Na primer / seznam
ukaz prikazuje vse delčke, ki so bili vneseni v trenutno sejo:
jshell> / seznam 1: int starost = 25; 2: plavajoči interes_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Ime niza; 5: starost = 30 6: stopnja obresti = 4,0 F 7: starost + = 10 8: besedilo [1] = 'A' 9: besedilo [2] = 'V' 10: besedilo [3] = 'A' 11: ime = "John Doe" 12: besedilo 13: starost ++ 14: starost
Številka v levem stolpcu enolično določa delček. S to številko lahko znova zaženete delček, ga navedete, spustite (izbrišete) odrezek itd.:
jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | izpuščena spremenljivka $ 7 jshell> / list 1: int age = 25; 2: plavajoča obrestna mera; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Ime niza; 5: starost = 30 6: stopnja obresti = 4.0F 8: besedilo [1] = 'A' 9: besedilo [2] = 'V' 10: besedilo [3] = 'A' 11: ime = "John Doe" 12 : besedilo 13: starost ++ 14: starost 15: besedilo
Tu smo vstopili /12 za ponovno izvajanje delčka # 12, ki izpiše vsebino besedilo
. Nato smo vstopili / seznam 13 za delček seznama št. 13, ki se poveča starost
. Nato smo vstopili / padec 7 da izbrišete delček št. 7 (ne več starost + = 10
delček). Končno smo vstopili / seznam če želite znova našteti vse delčke. Upoštevajte, da je bil delček št. 7 odstranjen, delček št. 15 pa je bil dodan zahvaljujoč /12
ukaz.
Odločanje: če, če-drugače, in preklop
Izjave o odločbi naj aplikacije izbirajo med več izvedbenimi potmi. Če na primer prodajalec ta mesec proda več kot 500 predmetov, mu prodajalcu dodajte bonus. Če je ocena učenca na testu iz algebre večja od 85 odstotkov, čestitajte učencu za dobro opravljeno delo; v nasprotnem primeru priporočite, da se študent za naslednji preizkus bolj potrudi.
Java podpira če
, če potem
, in stikalo
odločitve. Poleg tega novo stikalo
izraz Java je dodan v Java 12.
Izjava if
Najenostavnejša izjava o odločitvi Java je če
stavek, ki ovrednoti logični izraz in izvrši še en stavek, ko ta izraz oceni kot true. The če
stavek ima naslednjo sintakso:
če (Logični izraz) izjavo
The če
izjava se začne z rezervirano besedo če
in se nadaljuje z logičnim izrazom v oklepaju, ki mu sledi stavek, ki se izvrši, ko logični izraz oceni na true.
Naslednji primer prikazuje če
izjavo. Ko starost
spremenljivka vsebuje vrednost 55 ali več, če
izvrši System.out.println (...);
za izpis sporočila:
if (starost> = 55) System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve.");
Mnogi ljudje raje zavijejo katero koli preprosto izjavo, ki sledi če
stavek v oklepajih, ki ga dejansko pretvori v enakovreden sestavljeni stavek:
if (starost> = 55) {System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); }
Čeprav oklepaji pojasnjujejo, kaj izvaja če
trditev verjamem, da zamik zagotavlja to jasnost in da so oklepaji nepotrebni.
Eksperimentiranje z izjavami if
Preizkusimo ta primer z uporabojshell
. Ponovni zagon jshell
in nato uvedite starost
spremenljivka (tipa int
), ki je inicializiran v 55
:
jshell> int starost = 55
Nato vnesite prvi primer če
izjava (brez skodranih oklepajev, ki obkrožajo njeno telo):
jshell> if (starost> = 55) ...> System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); Ste ali ste bili upravičeni do predčasne upokojitve. jshell>
Upoštevajte, da jshell>
takojšnje spremembe ...>
poziv za nadaljevanje, ko vnesete večvrstični delček. Pritisnite Enter po zadnji vrstici delčka odreza jshell
da takoj izvedete odrezek.
Izvedite / seznam za seznam vseh delčkov. Opažam, da če
odrezek je bil dodeljen 2
v moji seji. Izvršitev /2 vzroki jshell
Če želite seznam in nato izvesti ta delček, se izpiše isto sporočilo.
Zdaj pa recimo, da dodelite 25
do starost
in nato znova zaženite /2 (ali enakovredna številka delčka v vaši seji). Tokrat ne bi smeli upoštevati sporočila v izhodu.
Izjava if-else
The če potem
stavek ovrednoti logični izraz in izvrši stavek. Izvedeni stavek je odvisen od tega, ali izraz izračuna vrednost true ali false. Tu je sintaksa za če potem
izjava:
če (Logični izraz) izjava1 drugače izjava2
The če potem
izjava je podobna če
izjava, vendar vključuje rezervirano besedo drugače
, čemur sledi stavek za izvedbo, če je logični izraz false.
Naslednji primer prikazuje če potem
izjava, ki nekomu, ki je mlajši od 55 let, pove, koliko let je ostalo do predčasne upokojitve:
if (starost> = 55) System.out.println ("Ste ali ste bili upravičeni do predčasne upokojitve."); else System.out.println ("Imate" + (55 let) + "leta do predčasne upokojitve.");
Pogojni operator v primerjavi z if-else
Pogojni operator (?:
) je podoben če potem
izjavo. Vendar tega operaterja ni mogoče uporabiti za izvajanje nadomestnih stavkov. Namesto tega lahko vrne samo eno od dveh vrednosti iste vrste. (Pogojni operator je včasih znan tudi kot trojni operater.)
Veriženje stavkov if-else
Java vam omogoča večkratno povezovanje če potem
izjave skupaj za situacije, ko morate za izvedbo izbrati enega od več stavkov:
če (Logični izraz1) izjava1 sicer če (Logični izraz2) izjava2 drugače ... drugače izjavaN
Veriženje del z izvajanjem naslednjega če potem
stavek, kadar koli je trenutni če
Boolov izraz izraza oceni na false. Razmislite o predstavitvi:
if (temperatura 100,0) System.out.println ("vrenje"); else System.out.println ("normalno");
Prvi če potem
izjava določa, če temperatura
je vrednost negativna. Če je tako, se izvrši System.out.println ("zamrzovanje");
. V nasprotnem primeru izvede sekundo če potem
izjavo.
Drugi če potem
izjava določa, če temperatura
Vrednost je večja od 100. V tem primeru se izvede System.out.println ("vrenje");
. V nasprotnem primeru se izvrši System.out.println ("normalno");
.
Težave z bingljanjem
Kdaj če
in če potem
se uporabljajo skupaj in izvorna koda ni pravilno zamaknjena, je težko določiti katero če
sodelavci z drugače
. Težavo lahko vidite v spodnji kodi:
int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 in y> 0"); else System.out.println ("x <= 0");
Verjetno bi pričakovali, da boste videli x <= 0
kot izhod iz te kode, vendar se to ne bo zgodilo; namesto tega ne bo nič. Težava je v tem, da drugače
ujema do najbližjega če
, kateri je če (y> 0)
. S ponovnim formatiranjem kode je bolj jasno, kaj se dogaja:
int x = 0; int y = 2; if (x> 0) if (y> 0) System.out.println ("x> 0 in y> 0"); else System.out.println ("x <= 0");
Tu je bolj jasno kot če (y> 0) ... drugače ...
če potem
izjava sledi če (x> 0)
izjavo. Če se želite ujemati z namenom prejšnjega primera, morate okrog uvesti oklepaje če (y> 0)
in nadaljnjo izjavo. V bistvu bo sledil blok če (x> 0)
:
int x = 0; int y = 2; if (x> 0) {if (y> 0) System.out.println ("x> 0 in y> 0"); } else System.out.println ("x <= 0");
Ker x> 0
oceni na false, System.out.println ("x <= 0");
izvrši. The drugače
rezervirana beseda se očitno ujema z če (x> 0)
.
Stavek preklopa
Ko morate izbrati med več izvedbenimi potmi, se stikalo
izjava ponuja učinkovitejšo alternativo veriženju. Oglejte si stikalo
izjava:
stikalo (izraz izbirnika) { Ovitek vrednost1: izjava1 [break;] primer vrednost2: izjava2 [odmor;] ... primer vrednostN: izjavaN [odmor;] [privzeto: izjavo] }
The stikalo
izjava se začne z rezervirano besedo stikalo
in nadaljuje z a izraz izbirnika ki izbere enega od naslednjih primerov ali privzeti primer za izvedbo. Izbirni izraz izračuna celo število, znak ali niz.
Konstante stikal in enum
Izbirni izraz lahko oceni tudi na enum
konstanten. Predstavil vam bom enum
s v prihodnji vadnici.
Vsak primer določa stavek, ki ga je treba izvršiti. Primer se začne z rezervirano besedo Ovitek
in vrednost, ki označuje primer. Po debelem črevesu (:
) znak je stavek za izvedbo. Izjavi lahko po želji sledi odmor;
, da prenese izvedbo na prvi stavek po stikalo
. Če se nobena od oznak velikih in malih črk ne ujema z vrednostjo izbirnega izraza, je neobvezna privzeta črka, ki se začne z rezervirano besedo privzeto
, se bo izvedel.
Spodaj je stikalo
stavek, ki se uporablja za ugotavljanje, ali je celoštevilčna vrednost soda ali neparna (z uporabo operatorja preostanka). Nato preko ohišja, katerega nalepka se ujema z ostankom, prikaže ustrezno sporočilo:
int i = 27; stikalo (i% 2) {primer 0: System.out.println ("even"); odmor; primer 1: System.out.println ("liho"); }