Aplikace Java zpracovávají data vyhodnocením výrazy, což jsou kombinace literálů, volání metod, názvů proměnných a operátorů. Vyhodnocení výrazu obvykle vytvoří novou hodnotu, kterou lze uložit do proměnné, použít k rozhodnutí atd.
V tomto kurzu se naučíte, jak psát výrazy pro vaše programy Java. V mnoha případech budete k psaní výrazů Java používat operátory a je jich mnoho typy operátorů vědět, jak používat. Stručně představím typy operátorů jazyka Java (včetně typů aditivních, bitových, logických, podmíněných, posuvných a rovných) a jejich operandy. Dozvíte se také o důležitých konceptech, jako je přetížení operátora a přednost operátora, a uvidíte ukázku převodu primitivního typu. Na závěr budu mít malý program Java, který můžete použít k vlastnímu procvičování konverzí primitivního typu.
stáhnout Získat kód Stáhněte si zdrojový kód například pro aplikace v tomto výukovém programu. Vytvořil Jeff Friesen pro JavaWorld.Jednoduché výrazy
A jednoduchý výraz je doslovný název proměnné nebo volání metody. Nejsou zapojeni žádní operátoři. Zde je několik příkladů jednoduchých výrazů:
52 // celé číslo doslovného věku // název proměnné System.out.println ("ABC"); // volání metody „Java“ // řetězcový literál 98,6D // dvojitý přesný literál s plovoucí desetinnou čárkou 89L // dlouhý celočíselný literál
Jednoduchý výraz má a typ, což je buď primitivní typ, nebo referenční typ. V těchto příkladech 52
je 32bitové celé číslo (int
); System.out.println ("ABC");
je neplatné (prázdnota
) protože nevrací žádnou hodnotu;"Jáva"
je řetězec (Tětiva
); 98,6D
je 64bitová hodnota s plovoucí desetinnou čárkou s dvojitou přesností (dvojnásobek
); a 89L
je 64bitové celé číslo (dlouho
). Nevíme stáří
typ.
Experimentování s jshell
Tyto a další jednoduché výrazy můžete snadno vyzkoušet pomocí jshell
. Například zadejte 52
na jshell>
výzva a obdržíte něco jako následující výstup:
$1 ==> 52
$1
je jméno a proměnná scratch že jshell
vytváří k ukládání 52
. (Proměnné typu Scratch se vytvářejí vždy, když se zadávají literály.) Provést System.out.println ($ 1)
a uvidíte 52
jako výstup.
Můžeš běžet jshell
s -proti
argument příkazového řádku (jshell -v
) ke generování podrobné zpětné vazby. V tomto případě zadání 52
by mělo za následek následující zprávu odhalující tuto proměnnou scratch $1
má int
(32bitové celé číslo) typ:
| vytvořena stírací proměnná $ 1: int
Dále zkuste zadat stáří
. V takovém případě pravděpodobně obdržíte chybovou zprávu, že symbol nebyl nalezen. Java Shell to předpokládá stáří
je proměnná, ale nezná její typ. Budete muset zahrnout typ; například se podívejte, co se stane, když zadáte int věk
.
Složené výrazy
A složený výraz se skládá z jednoho nebo více jednoduchých výrazů integrovaných do většího výrazu pomocí operátor, což je sled instrukcí symbolicky znázorněných ve zdrojovém kódu. Operátor transformuje svůj výraz operand (s) do jiné hodnoty. Například v 6 * 5
, operátor násobení (*
) transformuje operandy 6
a 5
do 30.
Složené výrazy lze kombinovat do větších výrazů. Například, 6 * 5 + 10
představuje složený výraz 6 * 5
a složený výraz skládající se z jejich produktu, operátoru přidání +
a číslo 10
. Pořadí vyhodnocení (nejdříve vynásobte a poté přidejte) je diktováno Java pravidlo priority, ke kterému se brzy dostaneme.
Složené výrazy mohou být také jednoduché
6 * 5
je složený výraz složený ze dvou jednoduchých výrazů, 6
a 5
. Ale 6 * 5
je také jednoduchý výraz z +
perspektiva. The +
operátor vidí pouze svůj produkt 30, což je jednoduchý výraz.
Operátory a operandy
Operátory Java jsou klasifikovány podle počtu operandů:
- A unární operátor má například jednoho operanda unární minus (např.,
-5
). - A binární operátor má dva operandy, příklady jsou násobení a sčítání.
- A ternární operátor má tři operandy; příkladem je podmíněný operátor (
?:
).
Operátoři Java jsou také klasifikováni podle pozice:
- A operátor předpony je unární operátor, který předchází svému operandu (např.
-5
). - A operátor postfixu je unární operátor, který následuje svůj operand (např.
věk ++;
- přidat 1 dostáří
číselná hodnota). - An operátor infix je binární nebo ternární operátor mezi operandy operátoru (např.
věk + 5
).
Další příklad jshell
Další operátory představím v následujících částech, kde uvádím příklady v podobě aplikací. Tyto operátory můžete také vyzkoušet pomocí jshell
, jako tak:
jshell> 6 + 2 $ 1 ==> 8 jshell> 7 * $ 1 $ 2 ==> 56
V tomto případě nejprve zadáme výraz 6 + 2
, který jshell
vyhodnotí a přiřadí výslednou 8 k scratch proměnné $1
. Dále se množíme $1
podle 7
, který ukládá 56 v proměnné scratch $2
. Tento příklad ukazuje, že ve výrazech Java můžete použít pomocné proměnné.
Přetížené operátory
Plus (+) operátor je příkladem přetížený operátor, což je operátor, který provádí jednu z několika operací na základě typy jejích operandů. Operátor plus provádí sčítání celých čísel, když jsou oba operandy celá čísla, sčítání s plovoucí desetinnou čárkou, když jsou oba operandy hodnoty s plovoucí desetinnou čárkou, a zřetězení řetězců, když jsou oba operandy řetězce. Operátor mínus (-) je také přetížen a provádí odečítání celého čísla nebo plovoucí desetinné čárky.
Typy operátorů v Javě
Aditivní operátory
The aditivní operátory zvýšit nebo snížit číselnou hodnotu sčítáním a odčítáním. Mezi aditivní operátory patří přidání (+
), odčítání (-
), postdecrement (--
), přírůstek (++
), preecrement (--
) a preincrement (++
). Zřetězení řetězců (+
) je také považován za aditivní. Zde je formální definice pro každého z těchto operátorů:
- Přidání: Dáno
operand1 + operand2
, kde každý operand musí být znakového nebo číselného typu, přidejteoperand2
naoperand1
a vrátit částku. Příklad:4 + 6
. - Odčítání: Dáno
operand1 - operand2
, kde každý operand musí být znakového nebo číselného typu, odečístoperand2
zoperand1
a vrátit rozdíl. Příklad:4 - 6
. - Postdecrement: Dáno
proměnná--
, kdeproměnná
musí být znakového nebo číselného typu, odečíst od 1proměnná
hodnota (uložení výsledku doproměnná
) a vrátit původní hodnotu. Příklad:X--;
. - Přírůstek: Dáno
proměnná++
, kdeproměnná
musí být znakového nebo číselného typu, přidat 1 doproměnná
hodnota (uložení výsledku doproměnná
) a vrátit původní hodnotu. Příklad:x ++;
. - Předčasnost: Dáno
--proměnná
, kdeproměnná
musí být znakového nebo číselného typu, odečíst 1 od jeho hodnoty, uložit výsledek doproměnná
, a vrátit novou zmenšenou hodnotu. Příklad:--X;
. - Předkrm: Dáno
++proměnná
, kdeproměnná
musí být znakového nebo číselného typu, přidat k jeho hodnotě 1, uložit výsledek doproměnná
, a vrátit novou zvýšenou hodnotu. Příklad:++ x;
. - Zřetězení řetězců: Dáno
operand1 + operand2
, kde je alespoň jeden operand zTětiva
typ, připojitoperand2
řetězcové vyjádření dooperand1
řetězcovou reprezentaci a vrátí výsledek. Příklad:„A“ + „B“
.
Operátory sčítání, odčítání, postdecrement, postincrement, predecrement a preincrement mohou generovat hodnoty, které překračují limity typu výsledku. Například přidání dvou velkých kladných 64bitových celočíselných hodnot může vytvořit hodnotu, kterou nelze reprezentovat v 64 bitech. Výsledné přetečení není detekováno ani hlášeno operátory aditivní Java.
Detekce přetečení v knihovně standardních tříd Java
Knihovna standardní třídy Matematika
třída zahrnuje metody pro detekci přetečení. Například, int addExact (int x, int y)
přidá hodnoty do X
a y
, vrácení částky nebo vyvolání výjimky při přetečení.
Příklad aplikace: Aditivní operátory
Výpis 1 představuje malou aplikaci pro hraní s aditivními operátory Java.
Výpis 1. Aditivní operátory v Javě (AddOp.java)
třída AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int věk = 65; System.out.println (věk); System.out.println (věk -); System.out.println (věk ++); System.out.println (- věk); System.out.println (++ věk); System.out.println ("A" + "B"); }}
V předchozím tutoriálu jste se naučili, jak používat JDK javac
nástroj pro kompilaci zdrojového kódu Java a Jáva
nástroj pro spuštění výsledné aplikace. K sestavení výpisu 1 proveďte následující příkaz:
javac AddOp.java
Za předpokladu úspěšné kompilace byste měli dodržovat AddOp.class
soubor v aktuálním adresáři. Spusťte následující příkaz:
java AddOp
AddOp
reaguje vytvořením následujícího výstupu:
588 -4,3 65 65 64 64 65 AB
Studium tohoto výstupu nabízí vhled do operátorů postincrement, postdecrement, preincrement a predecrement. Pro dodatečné zvýšení / snížení stáří
Aktuální hodnota je vydána před operací přírůstku / snížení. U preincrement / predecrement se provede operace a její výsledek se uloží do stáří
, a pak stáří
novou hodnotou je výstup.
Iterace s operátory Java
Operátory aditiv jsou zvláště užitečné v kontextu iterační prohlášení, kde se používají k přechodu na další iteraci. O iteračních příkazech se dozvíte v dalším kurzu Java 101.
Operátor indexu pole
The operátor indexu pole ([]
) přistupuje k prvku pole poskytnutím prvku index (pozice). Tento operátor je umístěn za názvem proměnné pole, jako v známky [0]
(přístup k prvnímu prvku v poli přiřazenému známky
; první prvek je uložen v indexu 0). Zde je formální definice:
Dáno proměnná[index]
, kde index
musí být celé číslo (int
) zadejte, načtěte hodnotu z nebo ji uložte do proměnná
úložný prvek na místě index
. Příklad: teploty [1]
Hodnota předána index
je 32bitové celé číslo, které má buď 0, nebo kladnou hodnotu v rozsahu do jedné menší než je délka pole, což je označeno připojením .délka
na název pole. Například, stupně. délka
vrací počet prvků v poli přiřazených známky
.
Proměnné pole vs. pole
známky
není pole, ale je proměnná obsahující odkaz na oblast paměti, která tvoří pole. To platí pro všechna pole Java. Je však běžné se o tom zmínit známky
nebo libovolnou proměnnou pole jako pole.
Příklad aplikace: Operátor indexu pole
Výpis 2 představuje zdrojový kód ukázkové aplikace, která vám umožní hrát s operátorem indexu pole.
Výpis 2. Operátor indexu pole v Javě (ArrayIndexOp.java)
třída ArrayIndexOp {public static void main (String [] args) {int [] grades = {89, 90, 68, 73, 79}; System.out.println (stupně [1]); známky [1] = 91; System.out.println (stupně [1]); int index = 4; System.out.println (stupně [index]); System.out.println (stupně ['C' - 'A']); // System.out.println (stupně [1D]); }}
Výpis 2 je poněkud zajímavější než Výpis 1. Po vytvoření pětičlenného jednorozměrného pole celých čísel (pomocí inicializátoru pole) a přiřazení odkazu na pole známky
, hlavní()
postupuje k přístupu k různým prvkům. Zajímavé jsou dvě položky:
- Index operátoru indexu pole musí být nakonec 32bitové celé číslo (0 nebo kladná hodnota). Můžete zadat název celočíselné proměnné (např.
index
), který obsahuje hodnotu indexu, jako index. - Můžete určit výpočet zahrnující literály znaků. (Později v tomto tutoriálu představím převody typů a zjistíte proč
„C“ - „A“
vytvoří celé číslo (2), které slouží jako platný index.)
Poslední příklad, který projde 1D
jako index pro operátor indexu pole je komentován, protože se nebude kompilovat. Pokud odkomentujete řádek a pokusíte se zkompilovat výpis 2, zobrazí se chybová zpráva o nekompatibilních typech: „možná ztrátová konverze z dvojnásobek
na int.
."
Zkompilovat výpis 2 (javac ArrayIndexOp.java
) a spusťte aplikaci (java ArrayIndexOp
). Měli byste dodržovat následující výstup:
90 91 79 68
Operátor indexu pole a vícerozměrná pole
Tento operátor můžete použít s vícerozměrnými poli. Například za předpokladu, že dvojrozměrný náklady
pole, náklady [0] [1]
přistupuje k prvku přiřazenému k prvnímu řádku (přes [0]
) a druhý sloupec (přes [1]
).
Operátoři přiřazení
The operátor přiřazení (=
) přiřadí hodnotu výrazu proměnné (např. i = 6;
), včetně prvku pole (např. x [0] = 15;
). Výraz a proměnná musí být kompatibilní s přiřazením, což znamená, že jejich typy musí souhlasit. Například nemůžete přiřadit řetězcový literál celočíselné proměnné. Více o tom vysvětlím, když budeme diskutovat o převodu typů.
Složené operátory přiřazení (+=
, -=
, *=
, /=
, %=
, &=
, |=
, ^=
, <<=
, >>=
, >>>=
) Vyhodnoťte výrazy a přiřaďte výsledky proměnným v jednom kroku. Každý výraz a proměnná musí být kompatibilní s přiřazením. Každý operátor slouží jako užitečná zkratka. Například místo určení x = x + 3;
, můžete zadat kratší a ekvivalentní x + = 3;
.
Mějte to krátké!
Místo upřesnění x = x + 1;
nebo x = x - 1;
, můžete zadat kratší x + = 1;
nebo x - = 1;
. Můžete ušetřit ještě více stisknutí kláves zadáním kratšího x ++;
nebo X--;
.