Java-applikasjoner vurderer uttrykk i sammenheng med uttalelser, som brukes til oppgaver som å deklarere en variabel, ta en beslutning eller iterere over utsagn. En uttalelse kan uttrykkes som en enkel eller sammensatt uttalelse:
- EN enkel uttalelse er en enkelt frittstående instruksjon for å utføre en oppgave; den må avsluttes med semikolontegn (
;
). - EN sammensatt uttalelse er en sekvens av enkle og andre sammensatte utsagn som ligger mellom tegn med åpen og nær stag (
{
og}
), som avgrenser den sammensatte uttalelsens grenser. Sammensatte utsagn kan være tomme, vil vises hvor enkle utsagn dukker opp, og er alternativt kjent som blokker. En sammensatt uttalelse avsluttes ikke med semikolon.
I denne opplæringen lærer du hvordan du bruker uttalelser i Java-programmene dine. Du kan bruke uttalelser som hvis
, hvis-annet
, bytte om
, til
, og samtidig som
å erklære variabler og spesifisere uttrykk, ta beslutninger, itere (eller loop) over utsagn, bryte og fortsette iterasjon og mer. Jeg legger igjen noen av de mer eksotiske uttalelsene - for eksempel uttalelser for å returnere verdier fra kalte metoder og for å kaste unntak - for fremtidige Java 101-veiledninger.
Bytt uttrykk i Java 12
Merk at denne opplæringen er oppdatert for Java 12 og inkluderer en kort introduksjon til bytte om
uttrykkene.
Variable erklæringer og oppgaver
Jeg har tidligere introdusert Java-variabler og forklart at de må deklareres før de brukes. Fordi en variabel erklæring er en frittstående øy med kode, er den faktisk en uttalelse - a enkel uttalelse, for å være nøyaktig. Alt dette er variabel erklæring:
int alder = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Strengnavn;
En variabelerklæring består minimalt av et typenavn, eventuelt etterfulgt av en sekvens med parantesparentespar, etterfulgt av et navn, eventuelt etterfulgt av en sekvens med parantesparentespar, og avsluttes med semikolon. En variabel kan også initialiseres eksplisitt under erklæringen.
Vurder nå oppgaveerklæring, som er nært knyttet til uttalelsen om variabel erklæring. En oppgaveerklæring tilordner en verdi (muligens en referanse til en matrise eller en referanse til et objekt) til en variabel. Her er noen eksempler:
alder = 30; rentesats = 4.0F; alder + = 10; tekst [1] = 'A'; tekst [2] = 'V'; tekst [3] = 'A'; name = "John Doe";
En oppgaveerklæring er et eksempel på en uttrykk uttalelse, som er et uttrykk som kan brukes som et utsagn hvis det blir fulgt med et semikolon. Følgende uttrykk kvalifiserer også som uttrykksuttalelser:
- Forhøyning (f.eks.
++ x;
) - Forhåndsinnstilling (f.eks.
--y;
) - Etterøkning (f.eks.
x ++;
) - Postdecrement (f.eks.
y--;
) - Metodesamtale (f.eks.
System.out.println ("Hei");
) - Objektoppretting (f.eks.
ny streng ("ABC");
)
Variable erklæringer med jshell
Du kan bruke jshell
å eksperimentere med variabel erklæringer og uttrykk uttalelser. Her er noen eksempler for å komme i gang (se "Lær Java fra grunnen av" for en introduksjon til Java Shell):
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> Navn på streng ==> 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
Legg merke til det alder ++
ser ikke ut til å ha oppnådd noe. Her ser du det 40
har blitt tildelt skrapevariabelen $13
. Imidlertid utfører postinkrement-operatøren trinnet etter å ha returnert gjeldende verdi. (Egentlig lagrer den nåværende verdi et sted, utfører trinnet og returnerer deretter den lagrede verdien.) Angir alder beviser det alder
inneholder 41, resultatet av etterøkningen.
Java Shell tilbyr forskjellige kommandoer og funksjoner som forenkler arbeidet med utdrag. For eksempel /liste
kommandoen viser alle utdrag som er lagt inn i den gjeldende økten:
jshell> / liste 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Strengnavn; 5: alder = 30 6: interesse_rate = 4.0F 7: alder + = 10 8: tekst [1] = 'A' 9: tekst [2] = 'V' 10: tekst [3] = 'A' 11: navn = "John Doe" 12: tekst 13: alder ++ 14: alder
Nummeret i venstre kolonne identifiserer en kodebit unikt. Du kan bruke dette nummeret til å kjøre en kodebit på nytt, liste kodebiten, slippe (slette) en kodebit, og så videre:
jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | droppet variabel $ 7 jshell> / liste 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Strengnavn; 5: age = 30 6: interest_rate = 4.0F 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: name = "John Doe" 12 : tekst 13: alder ++ 14: alder 15: tekst
Her har vi kommet inn /12 for å kjøre utdrag nr. 12 på nytt, som sender innholdet til tekst
. Vi kom inn / liste 13 for å liste utdrag # 13, som øker alder
. Deretter gikk vi inn / slipp 7 for å slette kodebit nr. 7 (ikke mer alder + = 10
utdrag). Endelig kom vi inn /liste for å liste alle utdrag på nytt. Legg merke til at utdrag # 7 er fjernet, og et utdrag # 15 er lagt til takket være /12
kommando.
Å ta avgjørelser: hvis, hvis-annet, og bytt
Beslutningsuttalelser la applikasjoner velge mellom flere kjørestier. For eksempel, hvis en selger selger mer enn 500 varer denne måneden, gi selgeren en bonus. Også, hvis en elevs karakter på en algebra-test er større enn 85 prosent, så gratuler studenten for å ha gjort det bra; ellers, anbefaler studenten å studere hardere for neste test.
Java støtter hvis
, hvis-annet
, og bytte om
avgjørelser. I tillegg en ny bytte om
uttrykk-funksjonen er lagt til Java 12.
If-uttalelsen
Den enkleste av Javas avgjørelser er hvis
uttalelse, som evaluerer et boolsk uttrykk og utfører en annen påstand når dette uttrykket evalueres til sant. De hvis
uttalelse har følgende syntaks:
hvis (Boolsk uttrykk) uttalelse
De hvis
uttalelse starter med reservert ord hvis
og fortsetter med et parentesert boolsk uttrykk, som blir fulgt av uttalelsen om å utføre når det boolske uttrykket evalueres til sant.
Følgende eksempel viser hvis
uttalelse. Når alder
variabel inneholder en verdi på 55 eller høyere, hvis
utfører System.out.println (...);
for å sende meldingen:
hvis (alder> = 55) System.out.println ("Du er eller var kvalifisert for førtidspensjonering.");
Mange foretrekker å pakke inn noen enkle uttalelser som følger hvis
uttalelse i parentes, effektivt konverterer den til en tilsvarende sammensatt uttalelse:
hvis (alder> = 55) {System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); }
Selv om seler avklarer hva som blir utført av hvis
uttalelse, mener jeg at fordypningen gir denne klarheten, og at seler er unødvendige.
Eksperimentere med if uttalelser
La oss prøve dette eksemplet ved hjelp avjshell
. Omstart jshell
og deretter introdusere en alder
variabel (av type int
) som er initialisert til 55
:
jshell> int age = 55
Deretter skriver du inn det første eksemplet hvis
uttalelse (uten krøllete bukseseler rundt kroppen):
jshell> if (age> = 55) ...> System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); Du er eller var kvalifisert for førtidspensjonering. jshell>
Legg merke til at jshell>
raske endringer i ...>
fortsettelsesprompten når du skriver inn et multilinjeutdrag. Pressing Tast inn etter at den siste utdragslinjen forårsaker jshell
for å kjøre utdraget umiddelbart.
Henrette /liste for å liste opp alle utdragene. Jeg observerer at hvis
uttalelsesutdrag er tildelt 2
i økten min. Utfører /2 årsaker jshell
for å liste opp og deretter utføre denne kodebiten, og den samme meldingen sendes ut.
Anta at du tildeler 25
til alder
og kjør deretter på nytt /2 (eller tilsvarende utdragnummer i økten din). Denne gangen bør du ikke observere meldingen i utgangen.
Hvis-annet uttalelsen
De hvis-annet
uttalelse evaluerer et boolsk uttrykk og utfører en uttalelse. Uttalelsen som utføres avhenger av om uttrykket evalueres til sant eller usant. Her er syntaksen for hvis-annet
uttalelse:
hvis (Boolsk uttrykk) uttalelse 1 ellers uttalelse2
De hvis-annet
uttalelse ligner på hvis
uttalelse, men den inkluderer det reserverte ordet ellers
, etterfulgt av en uttalelse som skal utføres når det boolske uttrykket er falskt.
Følgende eksempel viser en hvis-annet
uttalelse som forteller noen som er under 55 år hvor mange år som er igjen til førtidspensjonering:
hvis (alder> = 55) System.out.println ("Du er eller var kvalifisert for førtidspensjonering."); annet System.out.println ("Du har" + (55 - alder) + "år til førtidspensjonering.");
Betinget operatør mot hvis-annet
Den betingede operatøren (?:
) ligner på et hvis-annet
uttalelse. Denne operatøren kan imidlertid ikke brukes til å utføre alternative uttalelser. I stedet kan den bare returnere en av to verdier av samme type. (Den betingede operatøren er også noen ganger kjent som den ternære operatøren.)
Kjedende if-else uttalelser
Java lar deg kjede flere hvis-annet
uttalelser sammen for situasjoner der du må velge en av flere utsagn å utføre:
hvis (Boolsk uttrykk1) uttalelse 1 eller hvis (Boolsk uttrykk2) uttalelse2 annet ... annet uttalelseN
Kjetting fungerer ved å utføre en påfølgende hvis ikke
uttalelse når gjeldende hvis
uttalelsens boolske uttrykk evalueres til falsk. Tenk på en demonstrasjon:
hvis (temperatur 100,0) System.out.println ("kokende"); annet System.out.println ("normal");
Den første hvis-annet
uttalelse avgjør om temperatur
verdien er negativ. I så fall kjøres det System.out.println ("frysing");
. Hvis ikke, utfører den et sekund hvis-annet
uttalelse.
Den andre hvis-annet
uttalelse avgjør om temperatur
Verdien er større enn 100. I så fall kjøres den System.out.println ("kokende");
. Ellers kjøres det System.out.println ("normal");
.
Dingler-annet problemet
Når hvis
og hvis-annet
brukes sammen, og kildekoden ikke er riktig innrykket, kan det være vanskelig å bestemme hvilken hvis
forbinder med ellers
. Du kan se problemet i koden nedenfor:
int x = 0; int y = 2; hvis (x> 0) hvis (y> 0) System.out.println ("x> 0 og y> 0"); annet System.out.println ("x <= 0");
Du forventer sannsynligvis å se x <= 0
som utdata fra denne koden, men det vil aldri skje; i stedet vil ingenting sendes ut. Problemet er at ellers
samsvarer med det nærmeste hvis
, som er hvis (y> 0)
. Omformatering av koden gjør det tydeligere hva som skjer:
int x = 0; int y = 2; hvis (x> 0) hvis (y> 0) System.out.println ("x> 0 og y> 0"); annet System.out.println ("x <= 0");
Her er det tydeligere enn en hvis (y> 0) ... annet ...
hvis-annet
uttalelse følger hvis (x> 0)
uttalelse. For å matche intensjonen i forrige eksempel, må du introdusere stagtegn rundt hvis (y> 0)
og dens påfølgende uttalelse. I hovedsak vil en blokk følge hvis (x> 0)
:
int x = 0; int y = 2; hvis (x> 0) {hvis (y> 0) System.out.println ("x> 0 og y> 0"); } annet System.out.println ("x <= 0");
Fordi x> 0
evaluerer til falsk, System.out.println ("x <= 0");
utfører. De ellers
reservert ord samsvarer tydelig med opp til hvis (x> 0)
.
Bytteerklæringen
Når du trenger å velge mellom flere kjørestier, vil bytte om
uttalelse tilbyr et mer effektivt alternativ til kjetting. Ta en titt på bytte om
uttalelse:
bytte om (velgeruttrykk) {sak verdi1: uttalelse 1 [pause;] sak verdi2: uttalelse2 [pause;] ... sak verdiN: uttalelseN [pause;] [standard: uttalelse] }
De bytte om
uttalelse begynner med reservert ord bytte om
og fortsetter med en velgeruttrykk som velger en av de påfølgende sakene eller standardsaken som skal utføres. Velgeruttrykket evalueres til et helt tall, et tegn eller en streng.
Bytt og enum konstanter
Velgeruttrykket kan også evalueres til en enum
konstant. Jeg skal introdusere enum
s i en fremtidig opplæring.
Hver sak identifiserer en uttalelse som skal utføres. Saken begynner med det reserverte ordet sak
og en verdi som merker saken. Etter et kolon (:
) karakter er utsagnet å utføre. Uttalelsen kan eventuelt følges av gå i stykker;
, for å overføre henrettelsen til den første uttalelsen etter bytte om
. Hvis ingen av saksetikettene samsvarer med velgeruttrykkets verdi, er det valgfrie standardtilfellet, som begynner med reservert ord misligholde
, vil utføre.
Nedenfor er en bytte om
setning som brukes til å bestemme om en heltallsverdi er jevn eller merkelig (ved å bruke resten av operatoren). Deretter sender den ut en passende melding via saken, hvis etikett samsvarer med resten:
int i = 27; bytte (i% 2) {tilfelle 0: System.out.println ("jevn"); gå i stykker; tilfelle 1: System.out.println ("odd"); }