Aplikácie Java spracovávajú údaje vyhodnotením výrazy, čo sú kombinácie literálov, volaní metód, názvov premenných a operátorov. Vyhodnotením výrazu sa zvyčajne vytvorí nová hodnota, ktorú je možné uložiť do premennej, použiť na rozhodnutie atď.
V tomto výučbe sa dozviete, ako písať výrazy pre vaše programy Java. V mnohých prípadoch budete na písanie svojich výrazov Java používať operátory a je ich veľa typy operátorov vedieť používať. Stručne predstavím typy operátorov Java (vrátane typov aditívnych, bitových, logických, podmienených, posuvných a rovných) a ich operandy. Dozviete sa tiež dôležité pojmy, ako je preťaženie operátora a prednosť operátora, a uvidíte ukážku konverzie primitívneho typu. Na záver zakončím malým programom Java, ktorý môžete použiť na samostatné precvičovanie konverzií primitívneho typu.
stiahnuť Získajte kód Stiahnite si zdrojový kód napríklad pre aplikácie v tejto príručke. Vytvoril Jeff Friesen pre JavaWorld.Jednoduché výrazy
A jednoduchý výraz je doslovný názov premennej alebo volanie metódy. Nie sú zapojení nijakí operátori. Tu je niekoľko príkladov jednoduchých výrazov:
52 // celé číslo doslovného veku // názov premennej System.out.println ("ABC"); // volanie metódy „Java“ // textový reťazec 98.6D // literálny kód s dvojitou presnosťou s pohyblivou rádovou čiarkou 89L // dlhý celočíselný literál
Jednoduchý výraz má a typu, čo je buď primitívny typ, alebo referenčný typ. V týchto príkladoch 52
je 32-bitové celé číslo (int
); System.out.println ("ABC");
je neplatné (neplatný
) pretože nevracia žiadnu hodnotu;„Java“
je reťazec (String
); 98,6D
je 64-bitová hodnota s pohyblivou rádovou čiarkou s dvojitou presnosťou (dvojitý
); a 89L
je 64-bitové celé číslo (dlho
). Nevieme Vek
typu.
Experimentuje s jshell
Tieto a ďalšie jednoduché výrazy môžete ľahko vyskúšať pomocou jshell
. Napríklad zadajte 52
na jshell>
výzva a dostanete niečo ako nasledujúci výstup:
$1 ==> 52
$1
je názov a variabilný scratch že jshell
vytvára na ukladanie 52
. (Premenné typu Scratch sa vytvárajú vždy, keď sa zadávajú literály.) Vykonať System.out.println ($ 1)
a uvidíš 52
ako výstup.
Môžeš utekať jshell
s -v
argument príkazového riadku (jshell -v
) na generovanie podrobnej spätnej väzby. V tomto prípade zadanie 52
bude mať za následok nasledujúcu správu odhaľujúcu uvedenú premennú scratch $1
má int
(32-bitové celé číslo) typ:
| vytvorená stieracia premenná $ 1: int
Ďalej skúste zadať Vek
. V takom prípade pravdepodobne dostanete chybové hlásenie, že symbol sa nenašiel. Java Shell to predpokladá Vek
je premenná, ale nevie jej typ. Museli by ste zahrnúť typ; napríklad uvidíte, čo sa stane, ak zadáte int vek
.
Zložené výrazy
A zložený výraz sa skladá z jedného alebo viacerých jednoduchých výrazov integrovaných do väčšieho výrazu pomocou operátor, čo je postupnosť pokynov symbolicky znázornených v zdrojovom kóde. Operátor transformuje svoj výraz operand (y) do inej hodnoty. Napríklad v 6 * 5
, operátor násobenia (*
) transformuje operandy 6
a 5
do 30.
Zložené výrazy je možné kombinovať do väčších výrazov. Napríklad, 6 * 5 + 10
predstavuje zložený výraz 6 * 5
a zložený výraz pozostávajúci z ich produktu, operátora pridania +
a číslo 10
. Poradie vyhodnotenia (najskôr vynásobte a potom pridajte) je diktované Java pravidlo priority, ku ktorej sa čoskoro dostaneme.
Zložené výrazy môžu byť tiež jednoduché
6 * 5
je zložený výraz zložený z dvoch jednoduchých výrazov, 6
a 5
. ale 6 * 5
je tiež jednoduchý výraz z +
perspektíva. The +
operátor vidí iba ich produkt, 30, čo je jednoduchý výraz.
Operátori a operandi
Operátory Java sú klasifikované podľa počtu operandov:
- A unárny operátor má napríklad jedného operanda unárne mínus (napr.
-5
). - A binárny operátor má dva operandy, príkladom je násobenie a sčítanie.
- A ternárny operátor má troch operandov; príkladom je podmienený operátor (
?:
).
Operátori Java sú tiež klasifikovaní podľa polohy:
- A operátor prefixu je unárny operátor, ktorý predchádza svojmu operandu (napr.
-5
). - A operátor postfixu je unárny operátor, ktorý nasleduje za svojim operandom (napr.
vek ++;
- pridať 1 doVek
číselná hodnota). - An operátor infix je binárny alebo ternárny operátor medzi operandmi operátora (napr.
vek + 5 rokov
).
Ďalším príkladom jshell
V ďalších častiach predstavím ďalších operátorov, kde uvádzam príklady vo forme aplikácií. Môžete si tiež vyskúšať týchto operátorov s jshell
, ako:
jshell> 6 + 2 $ 1 ==> 8 jshell> 7 * $ 1 $ 2 ==> 56
V takom prípade najskôr zadáme výraz 6 + 2
, ktoré jshell
vyhodnotí a výslednú 8 priraďuje k scratch premennej $1
. Ďalej sa množíme $1
od 7
, ktorá ukladá 56 premenných do nuly $2
. Tento príklad ukazuje, že vo výrazoch Java môžete používať pomocné premenné.
Preťažení operátori
Plus (+) je príklad operátora preťažený operátor, ktorý je operátorom, ktorý vykonáva jednu z niekoľkých operácií na základe typy jeho operandov. Operátor plus vykoná sčítanie celých čísel, keď sú oba operandy celé čísla, sčítanie s pohyblivou rádovou čiarkou, keď sú obidva operandy hodnotami s pohyblivou desatinnou čiarkou, a zreťazenie reťazcov, keď sú oba operandy reťazce. Operátor mínus (-) je tiež preťažený a vykonáva odčítanie celého alebo pohyblivej rádovej čiarky.
Typy operátorov v prostredí Java
Aditívne operátory
The aditívne operátory zvýšenie alebo zníženie číselnej hodnoty sčítaním a odčítaním. Medzi aditívne operátory patrí dodatok (+
), odčítanie (-
), následný odvod (--
), prírastok (++
), predchodok (--
), a predkrm (++
). Zreťazenie reťazca (+
) sa tiež považuje za prísadu. Tu je formálna definícia pre každého z týchto operátorov:
- Dodatok: Dané
operand1 + operand2
, kde každý operand musí byť znakového alebo číselného typu, doplňteoperand2
dooperand1
a vrátiť sumu. Príklad:4 + 6
. - Odčítanie: Dané
operand1 - operand2
, kde každý operand musí byť znakového alebo číselného typu, odčítaťoperand2
odoperand1
a vrátiť rozdiel. Príklad:4 - 6
. - Postdecrement: Dané
premenná--
, kdepremenná
musí byť znakového alebo číselného typu, odčítať od 1premenná
hodnota (uloženie výsledku dopremenná
) a vráti pôvodnú hodnotu. Príklad:X--;
. - Prírastok: Dané
premenná++
, kdepremenná
musí byť znakového alebo číselného typu, pridať 1 kpremenná
hodnota (uloženie výsledku dopremenná
) a vráti pôvodnú hodnotu. Príklad:x ++;
. - Rozchod: Dané
--premenná
, kdepremenná
musí byť znakového alebo číselného typu, od jeho hodnoty odpočítať 1, výsledok uložiťpremenná
a vráti novú zníženú hodnotu. Príklad:--X;
. - Predbežnosť: Dané
++premenná
, kdepremenná
musí byť znakového alebo číselného typu, k jeho hodnote pridať 1, výsledok uložiť dopremenná
a vráti novú zvýšenú hodnotu. Príklad:++ x;
. - Zreťazenie reťazca: Dané
operand1 + operand2
, kde je najmenej jeden operand zString
typ, pridaťoperand2
reťazcové zastúpenie dooperand1
reťazcové zastúpenie a vráti výsledok. Príklad:„A“ + „B“
.
Operátory sčítania, odčítania, odčítania, odčítania, odčítania, predčítania a predčítania môžu generovať hodnoty, ktoré prekračujú limity typu výsledku. Napríklad pridaním dvoch veľkých kladných 64-bitových celočíselných hodnôt môže vzniknúť hodnota, ktorú nemožno reprezentovať v 64 bitoch. Výsledné pretečenie nie je detekované ani hlásené aditívnymi operátormi Javy.
Detekcia pretečenia v knižnici štandardných tried Java
Knižnica štandardnej triedy Matematika
trieda obsahuje metódy na zisťovanie pretečenia. Napríklad, int addExact (int x, int y)
pridá hodnoty v X
a r
, vrátenie sumy alebo vyvolanie výnimky pri pretečení.
Príklad aplikácie: Aditívne operátory
Zoznam 1 predstavuje malú aplikáciu na hranie s doplnkovými operátormi Java.
Zoznam 1. Aditívne operátory v Jave (AddOp.java)
trieda AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int vek = 65; System.out.println (vek); System.out.println (vek--); System.out.println (vek ++); System.out.println (- vek); System.out.println (++ vek); System.out.println ("A" + "B"); }}
V predchádzajúcom tutoriáli ste sa naučili, ako používať JDK javac
nástroj na kompiláciu zdrojového kódu Java a java
nástroj na spustenie výslednej aplikácie. Vykonajte nasledujúci príkaz na zostavenie záznamu č. 1:
javac AddOp.java
Za predpokladu úspešnej kompilácie by ste mali dodržiavať AddOp.class
súbor v aktuálnom adresári. Vykonajte nasledujúci príkaz na jeho spustenie:
java AddOp
AddOp
reaguje produkciou nasledujúceho výstupu:
588 -4,3 65 65 64 64 65 AB
Štúdium tohto výstupu ponúka pohľad na operátory postincrement, postdecrement, preincrement a predecrement. Pre dodatočný prírastok Vek
Aktuálna hodnota je vydaná pred operáciou prírastku / zníženia. Pre zvýšenie / zvýšenie sa operácia vykoná a jej výsledok sa uloží do Vek
, a potom Vek
vydáva sa nová hodnota.
Iterácia s operátormi Java
Operátory aditív sú obzvlášť užitočné v kontexte iteračný výpis, kde sa používajú na prechod do ďalšej iterácie. O príkazoch iterácie sa dozviete v nasledujúcom návode Java 101.
Operátor indexu poľa
The operátor indexu poľa ([]
) pristupuje k prvku poľa zadaním prvku index (poloha). Tento operátor je umiestnený za názvom premennej poľa, ako v známky [0]
(prístup k prvému prvku v poli priradenému k ročníky
; prvý prvok je uložený v indexe 0). Tu je formálna definícia:
Dané premenná[index]
, kde index
musí byť celé číslo (int
) napíšete, načítate hodnotu z alebo do nej uložíte hodnotu premenná
úložný prvok na mieste index
. Príklad: teploty [1]
Hodnota odovzdaná do index
je 32-bitové celé číslo, ktoré má buď 0, alebo kladnú hodnotu v rozmedzí od jednej menej ako je dĺžka poľa, čo je označené pripojením .dĺžka
na názov poľa. Napríklad, stupne.dĺžka
vráti počet prvkov v poli priradených k ročníky
.
Premenné poľa vs polia
ročníky
nie je pole, ale je premenná obsahujúca odkaz na oblasť pamäte, ktorá tvorí pole. Platí to pre všetky polia Java. Je však bežné sa o tom zmieniť ročníky
alebo ľubovoľná premenná poľa ako pole.
Príklad aplikácie: Operátor indexu poľa
Výpis 2 predstavuje zdrojový kód príkladnej aplikácie, ktorá vám umožní hrať sa s operátorom indexu poľa.
Zoznam 2. Operátor indexu poľa v Jave (ArrayIndexOp.java)
trieda ArrayIndexOp {public static void main (String [] args) {int [] grades = {89, 90, 68, 73, 79}; System.out.println (triedy [1]); známky [1] = 91; System.out.println (triedy [1]); int index = 4; System.out.println (známky [index]); System.out.println (triedy ['C' - 'A']); // System.out.println (známky [1D]); }}
Výpis 2 je o niečo zaujímavejší ako Výpis 1. Po vytvorení päťprvkového, jednorozmerného poľa celých čísel (pomocou inicializátora poľa) a priradení odkazu na pole k ročníky
, hlavný()
postupuje k prístupu k rôznym prvkom. Špeciálne zaujímavé sú dve položky:
- Index operátora indexu poľa musí byť nakoniec 32-bitové celé číslo (0 alebo kladná hodnota). Môžete určiť názov celočíselnej premennej (napr.
index
), ktorý obsahuje hodnotu indexu ako index. - Môžete určiť výpočet zahŕňajúci znakové literály. (Ďalej v tomto tutoriále predstavím prevody typov a zistíte prečo
„C“ - „A“
vytvorí celé číslo (2), ktoré slúži ako platný index.)
Posledný príklad, ktorý prejde 1D
ako index operátora indexu poľa je komentovaný, pretože sa nebude kompilovať. Ak odkomentujete riadok a pokúsite sa zostaviť záznam 2, zobrazí sa chybové hlásenie o nekompatibilných typoch: „možná stratová konverzia z dvojitý
do int.
."
Zostaviť zoznam 2 (javac ArrayIndexOp.java
) a spustite aplikáciu (java ArrayIndexOp
). Mali by ste dodržiavať nasledujúci výstup:
90 91 79 68
Operátor indexu poľa a viacrozmerné polia
Tento operátor môžete použiť s viacrozmernými poľami. Napríklad za predpokladu dvojrozmernosti náklady
pole, náklady [0] [1]
pristupuje k prvku priradenému k prvému riadku (cez [0]
) a druhý stĺpec (cez [1]
).
Prevádzkovatelia pridelenia
The operátor pridelenia (=
) priraďuje hodnotu výrazu k premennej (napr. i = 6;
), vrátane prvku poľa (napr. x [0] = 15;
). Výraz a premenná musia byť kompatibilné so zadaním, čo znamená, že ich typy musia súhlasiť. Napríklad nemôžete priradiť reťazcový literál k celočíselnej premennej. Viac o tom vysvetlím, keď diskutujeme o typových prevodoch.
Zložené operátory priradenia (+=
, -=
, *=
, /=
, %=
, &=
, |=
, ^=
, <<=
, >>=
, >>>=
) vyhodnocujte výrazy a priraďte výsledky k premenným v jednom kroku. Každý výraz a premenná musia byť kompatibilné s priradením. Každý operátor slúži ako užitočná skratka. Napríklad namiesto určenia x = x + 3;
, môžete určiť kratší a ekvivalentný údaj x + = 3;
.
Nech je to krátke!
Namiesto konkretizácie x = x + 1;
alebo x = x - 1;
, môžete uviesť kratšie x + = 1;
alebo x - = 1;
. Mohli by ste ušetriť ešte viac klávesové skratky zadaním kratšieho x ++;
alebo X--;
.