Java-applikationer vurderer udtryk i sammenhæng med udsagn, der bruges til opgaver som at erklære en variabel, tage en beslutning eller gentage over udsagn. En erklæring kan udtrykkes som en simpel eller en sammensat sætning:
- EN enkel erklæring er en enkelt enkeltstående instruktion til at udføre en opgave; det skal afsluttes med et semikolon-tegn (
;
). - EN sammensat erklæring er en sekvens af enkle og andre sammensatte udsagn, der er placeret mellem åbne og lukkede tegn (
{
og}
), som afgrænser sammensatte erklæringens grænser. Sammensatte udsagn kan være tomme, vises overalt, hvor enkle udsagn vises, og er alternativt kendt som blokke. En sammensat sætning afsluttes ikke med et semikolon.
I denne vejledning lærer du, hvordan du bruger udsagn i dine Java-programmer. Du kan bruge udsagn som f.eks hvis
, hvis ellers
, kontakt
, til
og mens
at erklære variabler og specificere udtryk, træffe beslutninger, gentage (eller sløjfe) over udsagn, bryde og fortsætte iteration og mere. Jeg efterlader nogle af de mere eksotiske udsagn - såsom udsagn om at returnere værdier fra kaldte metoder og til at kaste undtagelser - til fremtidige Java 101-tutorials.
Skift udtryk i Java 12
Bemærk, at denne tutorial er opdateret til Java 12 og inkluderer en kort introduktion til kontakt
udtryk.
Variable erklæringer og opgaver
Jeg har tidligere introduceret Java-variabler og forklaret, at de skal erklæres, før de bruges. Fordi en variabel erklæring er en selvstændig ø med kode, er den faktisk en erklæring - a enkel erklæring, for at være præcis. Alt dette er udsagn om variabel erklæring:
int alder = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Strengnavn;
En variabel erklæring består minimalt af et typenavn, eventuelt efterfulgt af en sekvens med firkantede parpar efterfulgt af et navn, eventuelt efterfulgt af en sekvens af firkantede parpar og afsluttet med et semikolon. En variabel kan også initialiseres eksplicit under dens erklæring.
Overvej nu opgaveerklæring, som er tæt knyttet til erklæringen om variabel erklæring. En opgaveerklæring tildeler en værdi (muligvis en reference til en matrix eller en reference til et objekt) til en variabel. Her er nogle eksempler:
alder = 30; rentesats = 4.0F; alder + = 10; tekst [1] = 'A'; tekst [2] = 'V'; tekst [3] = 'A'; name = "John Doe";
En opgaveerklæring er et eksempel på en udtrykserklæring, som er et udtryk, der kan bruges som et udsagn, hvis det følges med et semikolon. Følgende udtryk kan også betegnes som udtrykserklæringer:
- Forhøjelse (f.eks.
++ x;
) - Forudindlæring (f.eks.
--y;
) - Postforøgelse (f.eks.
x ++;
) - Postdecrement (f.eks.
y--;
) - Metodeopkald (f.eks.
System.out.println ("Hej");
) - Oprettelse af objekter (f.eks.
ny streng ("ABC");
)
Variable erklæringer med jshell
Du kan bruge jshell
at eksperimentere med variable erklæringer og udtrykserklæringer. Her er nogle eksempler for at komme i gang (se "Lær Java fra bunden" for en introduktion 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 > alder + = 10 $ 7 ==> 40 jshell> tekst [1] = 'A' $ 8 ==> 'A' jshell> tekst [2] = 'V' $ 9 ==> 'V' jshell> tekst [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
Læg mærke til det alder ++
ser ikke ud til at have opnået noget. Her ser du det 40
er tildelt scratch variablen $13
. Postforøgelsesoperatøren udfører dog stigningen efter returnering af den aktuelle værdi. (Faktisk gemmer den den aktuelle værdi et eller andet sted, udfører stigningen og returnerer derefter den lagrede værdi.) Indtastning alder beviser det alder
indeholder 41, resultatet af operationen efter forøgelse.
Java Shell indeholder forskellige kommandoer og funktioner, der forenkler arbejdet med uddrag. F.eks /liste
kommando viser alle uddrag, der er indtastet i den aktuelle session:
jshell> / liste 1: int alder = 25; 2: flydende rentesats; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Navn på streng; 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 identificerer entydigt et uddrag. Du kan bruge dette nummer til at genudføre et uddrag, liste uddraget, slippe (slette) et uddrag osv.:
jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | faldet variabel $ 7 jshell> / liste 1: int alder = 25; 2: flydende rentesats; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Navn på streng; 5: alder = 30 6: interesse_rate = 4.0F 8: tekst [1] = 'A' 9: tekst [2] = 'V' 10: tekst [3] = 'A' 11: navn = "John Doe" 12 : tekst 13: alder ++ 14: alder 15: tekst
Her er vi kommet ind /12 for at genudføre kodestykke nr. 12, som sender indholdet af tekst
. Vi gik derefter ind / liste 13 for at liste uddrag # 13, som øges alder
. Derefter gik vi ind / slip 7 for at slette uddrag nr. 7 (ikke mere alder + = 10
uddrag). Endelig gik vi ind /liste for at genliste alle uddrag. Bemærk, at uddrag nr. 7 er blevet fjernet, og et uddrag nr. 15 er blevet tilføjet takket være /12
kommando.
At træffe beslutninger: hvis, hvis-ellers, og skift
Beslutningserklæringer lad applikationer vælge mellem flere stier til udførelse. For eksempel, hvis en sælger sælger mere end 500 varer denne måned, skal du give sælgeren en bonus. Også, hvis en studerendes karakter på en algebra-test er større end 85 procent, så lykønsker den studerende med at have gjort det godt; Ellers anbefaler du, at den studerende studerer hårdere til den næste test.
Java understøtter hvis
, hvis ellers
og kontakt
beslutningserklæringer. Derudover en ny kontakt
udtryksfunktion er blevet føjet til Java 12.
If-erklæringen
Den enkleste af Java's beslutningserklæringer er hvis
sætning, som evaluerer et boolsk udtryk og udfører en anden sætning, når dette udtryk evalueres til sandt. Det hvis
udsagn har følgende syntaks:
hvis (Boolsk udtryk) udmelding
Det hvis
udsagn starter med reserveret ord hvis
og fortsætter med et boolesk udtryk i parentes, der efterfølges af udsagnet om at udføre, når det boolske udtryk evalueres til sandt.
Følgende eksempel viser hvis
udmelding. Når alder
variabel indeholder en værdi på 55 eller derover, hvis
udfører System.out.println (...);
for at sende meddelelsen:
hvis (alder> = 55) System.out.println ("Du er eller var berettiget til førtidspensionering.");
Mange mennesker foretrækker at pakke ethvert simpelt udsagn, der følger hvis
sætning i parentes, effektivt konvertere den til en tilsvarende sammensat sætning:
hvis (alder> = 55) {System.out.println ("Du er eller var berettiget til førtidspensionering."); }
Selvom seler tydeliggør, hvad der udføres af hvis
udsagn, jeg mener, at indrykket giver denne klarhed, og at seler er unødvendige.
Eksperimentere med if udsagn
Lad os prøve dette eksempel ved hjælp afjshell
. Genstart jshell
og derefter introducere en alder
variabel (af typen int
) der er initialiseret til 55
:
jshell> int alder = 55
Indtast derefter det første eksempel hvis
udsagn (uden de krøllede seler, der omgiver kroppen):
jshell> if (age> = 55) ...> System.out.println ("Du er eller var berettiget til førtidspensionering."); Du er eller var berettiget til førtidspensionering. jshell>
Bemærk, at jshell>
hurtige ændringer til ...>
fortsættelsesprompt, når du indtaster et multiline-uddrag. Trykker på Gå ind efter den sidste uddragslinje forårsager jshell
for straks at udføre uddraget.
Udfør /liste for at liste alle uddrag. Jeg bemærker, at hvis
Erklæringskodestykket er tildelt 2
i min session. Udfører /2 årsager jshell
for at liste og derefter udføre dette uddrag, og den samme besked udsendes.
Antag nu, at du tildeler 25
til alder
og udfør derefter igen /2 (eller det tilsvarende uddragnummer i din session). Denne gang skal du ikke overholde meddelelsen i output.
Hvis-ellers-erklæringen
Det hvis ellers
erklæring evaluerer et boolsk udtryk og udfører en erklæring. Den udførte sætning afhænger af, om udtrykket evalueres til sandt eller falsk. Her er syntaksen for hvis ellers
udmelding:
hvis (Boolsk udtryk) erklæring1 andet erklæring2
Det hvis ellers
udsagn svarer til hvis
erklæring, men den indeholder det reserverede ord andet
efterfulgt af en erklæring, der skal udføres, når det boolske udtryk er falsk.
Følgende eksempel viser en hvis ellers
erklæring, der fortæller en person, der er under 55 år, hvor mange år der er tilbage til førtidspensionering:
hvis (alder> = 55) System.out.println ("Du er eller var berettiget til førtidspensionering."); ellers System.out.println ("Du har" + (55 - alder) + "år tilbage til førtidspensionering.");
Betinget operatør vs hvis-ellers
Den betingede operatør (?:
) ligner et hvis ellers
udmelding. Denne operatør kan dog ikke bruges til at udføre alternative udsagn. I stedet kan den kun returnere en af to værdier af samme type. (Den betingede operatør er også undertiden kendt som den ternære operatør.)
Kædende if-else-udsagn
Java giver dig mulighed for at kæde flere hvis ellers
udsagn sammen for situationer, hvor du skal vælge en af flere udsagn, der skal udføres:
hvis (Boolsk udtryk 1) erklæring1 ellers hvis (Boolsk udtryk2) erklæring2 ellers ... ellers erklæringN
Kæde fungerer ved at udføre en efterfølgende hvis ellers
erklæring, når den aktuelle hvis
udsagnets boolske udtryk evalueres til falsk. Overvej en demonstration:
hvis (temperatur 100,0) System.out.println ("kogende"); ellers System.out.println ("normal");
Den første hvis ellers
erklæring bestemmer, om temperatur
værdi er negativ. I så fald udføres det System.out.println ("frysning");
. Hvis ikke, udføres det et sekund hvis ellers
udmelding.
Sekundet hvis ellers
erklæring bestemmer, om temperatur
værdi er større end 100. I så fald udføres den System.out.println ("kogende");
. Ellers udføres det System.out.println ("normal");
.
Problemet med dinglende andet
Hvornår hvis
og hvis ellers
bruges sammen, og kildekoden ikke er korrekt indrykket, kan det være svært at bestemme hvilken hvis
forbinder med andet
. 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"); ellers System.out.println ("x <= 0");
Du ville sandsynligvis forvente at se x <= 0
som output fra denne kode, men det vil aldrig ske; i stedet udsendes intet. Problemet er, at andet
matcher det nærmeste hvis
, som er hvis (y> 0)
. Omformatering af koden gør det tydeligere, hvad der sker:
int x = 0; int y = 2; hvis (x> 0) hvis (y> 0) System.out.println ("x> 0 og y> 0"); ellers System.out.println ("x <= 0");
Her er det klarere end en hvis (y> 0) ... ellers ...
hvis ellers
erklæring følger hvis (x> 0)
udmelding. For at matche hensigten med det foregående eksempel skal du introducere bøjlekarakterer rundt hvis (y> 0)
og dens efterfølgende erklæring. I det væsentlige følger en blok hvis (x> 0)
:
int x = 0; int y = 2; hvis (x> 0) {hvis (y> 0) System.out.println ("x> 0 og y> 0"); } andet System.out.println ("x <= 0");
Fordi x> 0
evalueres til falsk, System.out.println ("x <= 0");
udfører. Det andet
reserveret ord passer klart op til hvis (x> 0)
.
Switch-erklæringen
Når du skal vælge mellem flere eksekveringsstier, vises kontakt
statement giver et mere effektivt alternativ til chaining. Se på kontakt
udmelding:
kontakt (vælgerudtryk) { sag værdi1: erklæring1 [pause;] sag værdi2: erklæring2 [pause;] ... sag værdiN: erklæringN [pause;] [standard: udmelding] }
Det kontakt
erklæring begynder med reserveret ord kontakt
og fortsætter med en vælgerudtryk der vælger en af de efterfølgende sager eller standardsagen, der skal udføres. Vælgerudtrykket evalueres til et heltal, et tegn eller en streng.
Skift og enum konstanter
Selektorudtrykket kan også evalueres til et enum
konstant. Jeg introducerer enum
s i en fremtidig tutorial.
Hver sag identificerer en erklæring, der skal udføres. Sagen begynder med det reserverede ord sag
og en værdi, der mærker sagen. Efter et kolon (:
) karakter er udsagnet, der skal udføres. Erklæringen kan eventuelt efterfølges af pause;
, for at overføre eksekvering til den første erklæring efter kontakt
. Hvis ingen af sagsetiketterne stemmer overens med vælgerudtrykets værdi, er den valgfri standardsag, der begynder med reserveret ord Standard
, vil udføre.
Nedenfor er en kontakt
sætning, der bruges til at bestemme, om et heltalsværdi er lige eller ulige (ved hjælp af resten af operatoren). Derefter udsender den en passende meddelelse via sagen, hvis etiket matcher resten:
int i = 27; switch (i% 2) {case 0: System.out.println ("lige"); pause; sag 1: System.out.println ("ulige"); }