Aplikace Java vyhodnocují výrazy v kontextu prohlášení, které se používají pro úkoly, jako je deklarace proměnné, rozhodování nebo iterace nad příkazy. Výrok lze vyjádřit jako jednoduchý nebo složený výrok:
- A jednoduché prohlášení je samostatná samostatná instrukce k provedení úkolu; musí být ukončeno středníkem (
;
). - A složený výpis je posloupnost jednoduchých a dalších složených příkazů umístěných mezi znaky složené závorky a
{
a}
), které ohraničují hranice složeného příkazu. Složené příkazy mohou být prázdné, zobrazí se všude, kde se objeví jednoduché příkazy, a jsou alternativně známé jako bloky. Složený příkaz není ukončen středníkem.
V tomto kurzu se naučíte, jak používat příkazy ve svých programech Java. Můžete použít příkazy jako -li
, kdyby-jinak
, přepínač
, pro
, a zatímco
deklarovat proměnné a specifikovat výrazy, rozhodovat se, iterovat (nebo opakovat) příkazy, přerušovat a pokračovat v iteraci atd. Některé z exotičtějších příkazů - například příkazy pro vrácení hodnot z volaných metod a vyvolání výjimek - nechám pro budoucí výukové programy Java 101.
Přepínání výrazů v prostředí Java 12
Všimněte si, že tento výukový program byl aktualizován pro prostředí Java 12 a obsahuje krátký úvod do přepínač
výrazy.
Deklarace proměnných a přiřazení
Předtím jsem představil proměnné Java a vysvětlil, že musí být deklarovány před použitím. Protože deklarace proměnné je samostatný ostrov kódu, je to vlastně prohlášení - a jednoduché prohlášení, být přesný. Všechny tyto příkazy jsou prohlášení o proměnné:
int věk = 25; float interest_rate; char [] text = {'J', 'a', 'v', 'a'}; Název řetězce;
Deklarace proměnné minimálně sestává z názvu typu, volitelně následovaného posloupností párů hranatých závorek, následovaných názvem, volitelně následovaných posloupností párů hranatých závorek, a ukončena středníkem. Proměnná může být také explicitně inicializována během její deklarace.
Nyní zvažte prohlášení o zadání, který úzce souvisí s příkazem deklarace proměnné. Příkaz přiřazení přiřadí hodnotu (případně odkaz na pole nebo odkaz na objekt) proměnné. Zde jsou nějaké příklady:
věk = 30; úroková sazba = 4,0 F; věk + = 10; text [1] = 'A'; text [2] = 'V'; text [3] = 'A'; name = "John Doe";
Příkladem úkolu je příklad výraz výraz, což je výraz, který lze použít jako příkaz, pokud za ním následuje středník. Následující výrazy se také kvalifikují jako výrazové výrazy:
- Předkrm (např.
++ x;
) - Předkrm (např.
--y;
) - Přírůstek (např.
x ++;
) - Postdecrement (např.
y-;
) - Volání metody (např.
System.out.println ("Dobrý den");
) - Vytváření objektů (např.
nový řetězec („ABC“);
)
Variabilní deklarace s jshell
Můžeš použít jshell
experimentovat s deklaracemi proměnných a příkazy výrazů. Zde je několik příkladů, které vám pomohou začít (úvod do prostředí Java Shell najdete v části „Naučte se 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ázev řetězce 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šimněte si toho věk ++
nezdá se, že by něco dokázal. Tady to vidíte 40
byla přiřazena proměnné scratch $13
. Operátor postincrement však provede přírůstek po vrácení aktuální hodnoty. (Ve skutečnosti někde uloží aktuální hodnotu, provede přírůstek a poté vrátí uloženou hodnotu.) Zadání stáří to dokazuje stáří
obsahuje 41, výsledek operace po zvýšení.
Prostředí Java Shell poskytuje různé příkazy a funkce, které zjednodušují práci s úryvky. Například /seznam
příkaz zobrazí všechny úryvky, které byly zadány v aktuální relaci:
jshell> / list 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Název řetězce; 5: věk = 30 6: úroková sazba = 4,0 F 7: věk + = 10 8: text [1] = 'A' 9: text [2] = 'V' 10: text [3] = 'A' 11: jméno = "John Doe" 12: text 13: věk ++ 14: věk
Číslo v levém sloupci jednoznačně identifikuje úryvek. Toto číslo můžete použít k opětovnému provedení úryvku, výpisu úryvku, odstranění (odstranění) úryvku atd.:
jshell> / 12 text text ==> char [4] {'J', 'A', 'V', 'A'} jshell> / list 13 13: age ++ jshell> / drop 7 | zrušená proměnná $ 7 jshell> / list 1: int age = 25; 2: float interest_rate; 3: char [] text = {'J', 'a', 'v', 'a'}; 4: Název řetězce; 5: věk = 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: věk ++ 14: věk 15: text
Tady jsme vstoupili /12 znovu provést úryvek # 12, jehož výstupem je obsah text
. Pak jsme vstoupili / seznam 13 do seznamu úryvek č. 13, který se zvyšuje stáří
. Dále jsme vstoupili / pokles 7 odstranit úryvek č. 7 (už ne věk + = 10
úryvek). Nakonec jsme vstoupili /seznam znovu zobrazit všechny úryvky. Všimněte si, že fragment # 7 byl odstraněn a fragment # 15 byl přidán díky /12
příkaz.
Rozhodování: if-if-else, a switch
Prohlášení o rozhodnutí nechte aplikace volit mezi více cestami provedení. Například pokud prodejce prodá tento měsíc více než 500 položek, udělejte prodejci bonus. Pokud je známka studenta z testu algebry vyšší než 85 procent, blahopřejte studentovi k dobrému výsledku; v opačném případě doporučujeme, aby se student při příštím testu více učil.
Java podporuje -li
, kdyby-jinak
, a přepínač
prohlášení o rozhodnutí. Navíc nový přepínač
funkce výrazů byla přidána do Java 12.
Příkaz if
Nejjednodušší z rozhodovacích výroků Javy je -li
příkaz, který vyhodnotí booleovský výraz a provede další příkaz, když se tento výraz vyhodnotí jako true. The -li
příkaz má následující syntaxi:
pokud (Booleovský výraz) prohlášení
The -li
výpis začíná vyhrazeným slovem -li
a pokračuje s logickým výrazem v závorkách, za nímž následuje příkaz, který se má provést, když se logický výraz vyhodnotí jako true.
Následující příklad ukazuje -li
prohlášení. Když stáří
proměnná obsahuje hodnotu 55 nebo vyšší, -li
vykonává System.out.println (...);
odeslat zprávu:
if (age> = 55) System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu.");
Mnoho lidí dává přednost zabalení jakéhokoli jednoduchého prohlášení, které následuje za -li
příkaz v závorkách, který jej efektivně převede na ekvivalentní složený příkaz:
if (age> = 55) {System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); }
I když složené závorky objasňují, co provádí -li
prohlášení, domnívám se, že odsazení poskytuje tuto jasnost a že složené závorky nejsou nutné.
Experimentování s příkazy if
Zkusme tento příklad pomocíjshell
. Restartujte jshell
a poté zavést stáří
proměnná (typu int
), který je inicializován na 55
:
jshell> int age = 55
Dále zadejte první příklad -li
prohlášení (bez složených závorek obklopujících jeho tělo):
jshell> if (age> = 55) ...> System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); Jste nebo jste měli nárok na předčasný odchod do důchodu. jshell>
Všimněte si, že jshell>
rychlé změny ...>
výzva k pokračování, když zadáte úryvek více řádků. Lisování Enter po příčinách posledního úryvku jshell
okamžitě provést úryvek.
Vykonat /seznam do seznamu všech úryvků. Pozoruji, že -li
byl přidělen úryvek prohlášení 2
na mé relaci. Provádění /2 příčiny jshell
vypsat a poté provést tento úryvek a vydá se stejná zpráva.
Nyní předpokládejme, že jste přiřadili 25
na stáří
a poté znovu spustit /2 (nebo ekvivalentní číslo úryvku ve vaší relaci). Tentokrát byste neměli sledovat zprávu ve výstupu.
Příkaz if-else
The kdyby-jinak
výraz vyhodnotí booleovský výraz a provede příkaz. Provedený příkaz závisí na tom, zda je výraz vyhodnocen jako true nebo false. Zde je syntaxe pro kdyby-jinak
prohlášení:
pokud (Booleovský výraz) prohlášení1 jiný prohlášení2
The kdyby-jinak
prohlášení je podobné -li
prohlášení, ale obsahuje vyhrazené slovo jiný
, následovaný příkazem, který se má provést, když je logický výraz nepravdivý.
Následující příklad ukazuje kdyby-jinak
prohlášení, které říká někomu, kdo má méně než 55 let, kolik let zbývá do předčasného důchodu:
if (age> = 55) System.out.println ("Máte nebo jste měli nárok na předčasný odchod do důchodu."); else System.out.println ("Máte" + (55 - věk) + "let do předčasného odchodu do důchodu.");
Podmíněný operátor vs if-else
Podmíněný operátor (?:
) je podobný kdyby-jinak
prohlášení. Tento operátor však nelze použít k provedení alternativních příkazů. Místo toho může vrátit pouze jednu ze dvou hodnot stejného typu. (Podmíněný operátor je také někdy známý jako ternární operátor.)
Řetězení příkazů if-else
Java vám umožňuje řetězit více kdyby-jinak
příkazy společně pro situace, kdy je třeba zvolit jeden z více příkazů k provedení:
pokud (Booleovský výraz1) prohlášení1 jinak pokud (Booleovský výraz2) prohlášení2 jinde ... jinde prohlášení č
Řetězení funguje provedením následujícího kdyby-jinak
prohlášení kdykoli aktuální -li
Booleovský výraz příkazu je vyhodnocen jako false. Zvažte demonstraci:
if (teplota 100,0) System.out.println ("vroucí"); else System.out.println ("normální");
První kdyby-jinak
prohlášení určuje, zda teplota
hodnota je záporná. Pokud ano, provede se System.out.println ("zmrazení");
. Pokud ne, provede sekundu kdyby-jinak
prohlášení.
Druhý kdyby-jinak
prohlášení určuje, zda teplota
Hodnota je větší než 100. Pokud ano, provede se System.out.println ("vroucí");
. Jinak se provede System.out.println ("normální");
.
Problém visícího jiného
Když -li
a kdyby-jinak
jsou používány společně a zdrojový kód není správně odsazen, může být obtížné určit který -li
spolupracovníci s jiný
. Problém vidíte v kódu níže:
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");
Pravděpodobně byste čekali, že to uvidíte x <= 0
jako výstup z tohoto kódu, ale nikdy se to nestane; místo toho se nic nezobrazí. Problém je v tom, že jiný
odpovídá nejbližšímu -li
, který je pokud (y> 0)
. Přeformátováním kódu je jasnější, co se děje:
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");
Tady je to jasnější než if (y> 0) ... else ...
kdyby-jinak
prohlášení následuje if (x> 0)
prohlášení. Chcete-li odpovídat záměru předchozího příkladu, musíte zavést znaky složené závorky pokud (y> 0)
a jeho následné prohlášení. V zásadě bude následovat 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");
Protože x> 0
hodnotí jako nepravdivé, System.out.println ("x <= 0");
vykonává. The jiný
vyhrazené slovo jasně odpovídá až if (x> 0)
.
Přepínací příkaz
Pokud potřebujete vybrat mezi několika cestami provedení, přepínač
prohlášení nabízí efektivnější alternativu k řetězení. Podívejte se na přepínač
prohlášení:
přepínač (výraz selektoru) { případ hodnota1: prohlášení1 [break;] případ hodnota2: prohlášení2 [přestávka;] ... případ hodnotaN: prohlášení č [break;] [výchozí: prohlášení] }
The přepínač
výpis začíná vyhrazeným slovem přepínač
a pokračuje písmenem výraz selektoru který vybere jeden z následujících případů nebo výchozí případ k provedení. Výraz selektoru se vyhodnotí na celé číslo, znak nebo řetězec.
Konstanty switch a enum
Výraz selektoru lze také vyhodnotit na výčet
konstantní. Představím výčet
s v budoucím výukovém programu.
Každý případ identifikuje příkaz k provedení. Případ začíná vyhrazeným slovem případ
a hodnotu, která označí případ. Po dvojtečce (:
) znak je příkaz, který se má provést. Za příkazem může případně následovat přestávka;
, přenést provedení na první příkaz po přepínač
. Pokud žádný z popisků případů neodpovídá hodnotě výrazu selektoru, volitelný výchozí případ, který začíná vyhrazeným slovem výchozí
, provede.
Níže je a přepínač
příkaz používaný k určení, zda je celočíselná hodnota sudá nebo lichá (pomocí operátoru zbytku). Poté odešle příslušnou zprávu prostřednictvím případu, jehož štítek odpovídá zbytku:
int i = 27; switch (i% 2) {case 0: System.out.println ("even"); přestávka; případ 1: System.out.println ("lichý"); }