Aplikacije Java obdelajo podatke z vrednotenjem izrazi, ki so kombinacije literal, klicev metod, imen spremenljivk in operatorjev. Vrednotenje izraza običajno ustvari novo vrednost, ki jo lahko shranite v spremenljivko, ki se uporablja za sprejemanje odločitev itd.
V tej vadnici boste izvedeli, kako pisati izraze za svoje programe Java. V mnogih primerih boste za pisanje izrazov Java uporabljali operaterje, ki jih je veliko vrste operaterjev vedeti, kako uporabljati. Na kratko bom predstavil vrste operaterjev Java (vključno z aditivnimi, bitnimi, logičnimi, pogojnimi, premičnimi in enakopravnimi vrstami) in njihove operande. Spoznali boste tudi pomembne koncepte, kot sta preobremenitev operaterja in prednost operaterja, in videli boste prikaz pretvorbe primitivnega tipa. Zaključil bom z majhnim programom Java, s katerim lahko sami izvajate pretvorbe primitivnega tipa.
prenos Prenesite kodo Prenesite izvorno kodo, na primer programe v tej vadnici. Ustvaril Jeff Friesen za JavaWorld.Preprosti izrazi
A preprost izraz je dobesedno, ime spremenljivke ali klic metode. Noben operater ne sodeluje. Tu je nekaj primerov preprostih izrazov:
52 // celoštevilska dobesedna starost // ime spremenljivke System.out.println ("ABC"); // klic metode "Java" // niz literal 98.6D // literatura z dvojno natančnostjo s plavajočo vejico 89L // dolg celoštevilen literal
Preprost izraz ima tip, ki je bodisi primitivni ali referenčni tip. V teh primerih 52
je 32-bitno celo število (int
); System.out.println ("ABC");
je neveljavno (praznino
), ker ne vrne vrednosti;"Java"
je niz (Vrvica
); 98,6D
je 64-bitna vrednost s plavajočo vejico z dvojno natančnostjo (dvojno
); in 89L
je 64-bitno dolgo celo število (dolga
). Ne vemo starost
je tip.
Eksperimentiranje z jshell
Z lahkoto lahko preizkusite te in druge preproste izraze jshell
. Na primer, vnesite 52
pri jshell>
in dobili boste nekaj takega:
$1 ==> 52
$1
je ime a spremenljivka prask to jshell
ustvarja za shranjevanje 52
. (Spremenljivke za praske se ustvarijo vsakič, ko vnesemo literale.) Izvedite System.out.println ($ 1)
in boste videli 52
kot izhod.
Lahko tečeš jshell
z -v
argument ukazne vrstice (jshell -v
), da ustvarijo podrobne povratne informacije. V tem primeru vstop 52
bi povzročilo naslednje sporočilo, ki razkriva to spremenljivko prask $1
ima int
(32-bitno celo število) vrsta:
| ustvarjena spremenljivka prask $ 1: int
Nato poskusite vnesti starost
. V tem primeru boste verjetno prejeli sporočilo o napaki, da simbola ni bilo mogoče najti. Java Shell to domneva starost
je spremenljivka, vendar ne pozna njene vrste. Morali bi vključiti vrsto; na primer, poglejte, kaj se zgodi, če vstopite int starost
.
Sestavljeni izrazi
A sestavljeni izraz je sestavljen iz enega ali več preprostih izrazov, integriranih v večji izraz prek operater, ki je zaporedje navodil, simbolično predstavljenih v izvorni kodi. Operator spremeni svoj izraz operand (i) v drugo vrednost. Na primer, v 6 * 5
, operator množenja (*
) pretvori operande 6
in 5
v 30.
Sestavljene izraze lahko kombiniramo v večje izraze. Na primer, 6 * 5 + 10
predstavlja sestavljeni izraz 6 * 5
in sestavljeni izraz, sestavljen iz njihovega produkta, operaterja dodajanja +
in številko 10
. Vrstni red ocenjevanja (najprej pomnoži in nato dodaj) narekuje Java pravilo prednosti, do katerega bomo prišli v kratkem.
Tudi sestavljeni izrazi so lahko preprosti
6 * 5
je sestavljeni izraz, sestavljen iz dveh preprostih izrazov, 6
in 5
. Ampak 6 * 5
je tudi preprost izraz iz +
perspektive. The +
operater vidi samo njihov izdelek, 30, kar je preprost izraz.
Operaterji in operandi
Operaterji Java so razvrščeni po številu operandov:
- A unarni operater ima na primer en operand unarni minus (npr.
-5
). - A binarni operator ima dva operanda, primera sta množenje in seštevanje.
- A trojni operater ima tri operande; primer je pogojni operater (
?:
).
Operaterji Java so razvrščeni tudi po položaju:
- A predponski operater je unarni operator, ki je pred njegovim operandom (npr.
-5
). - A postfix operater je unarni operator, ki sledi svojemu operandu (npr.
starost ++;
- dodaj 1 vstarost
številčna vrednost). - An infix operator je binarni ali trojni operator med operandi operaterja (npr.
starost + 5
).
Še en primer jshell
V naslednjih razdelkih bom predstavil več operaterjev, kjer predstavljam primere v obliki aplikacij. Te operaterje lahko tudi preizkusite z jshell
, takole:
jshell> 6 + 2 $ 1 ==> 8 jshell> 7 * $ 1 $ 2 ==> 56
V tem primeru najprej vnesemo izraz 6 + 2
, ki jshell
oceni in dodeli nastalo spremenljivko 8 za praske $1
. Nato pomnožimo $1
avtor 7
, ki shrani 56 v spremenljivko nič $2
. Ta primer dokazuje, da lahko v izrazih Java uporabljate spremenljivke prask.
Preobremenjeni operaterji
Operator plus (+) je primer preobremenjeni operater, ki je operater, ki izvaja eno od več operacij, ki temeljijo na vrste njegovih operandov. Operator plus izvede celoštevilo, kadar sta oba operanda cela števila, seštevanje s plavajočo vejico, ko sta oba operanda vrednosti s plavajočo vejico, in združevanje nizov, kadar sta oba operanda niza. Tudi operater minus (-) je preobremenjen in izvaja odštevanje celih števil ali plavajoče vejice.
Vrste operaterjev v Javi
Aditivni operaterji
The aditivni operaterji povečati ali zmanjšati številsko vrednost s seštevanjem in odštevanjem. Operaterji aditivov vključujejo seštevanje (+
), odštevanje (-
), naknadno znižanje (--
), postinkrement (++
), predhodno določanje (--
) in predinkrement (++
). Združevanje nizov (+
) se šteje tudi za dodatek. Tu je formalna opredelitev za vsakega od teh operaterjev:
- Dodatek: Glede
operand1 + operand2
, pri čemer mora biti vsak operand znakovnega ali številčnega tipa, dodajoperand2
dooperand1
in vrnite vsoto. Primer:4 + 6
. - Odštevanje: Glede
operand1 - operand2
, pri čemer mora biti vsak operand znakovnega ali številčnega tipa, odštejoperand2
izoperand1
in vrnite razliko. Primer:4 - 6
. - Pomanjšanje: Glede
spremenljivka--
, kjespremenljivka
mora biti znakovnega ali številčnega tipa, odštej 1spremenljivka
vrednost (shranjevanje rezultata vspremenljivka
) in vrnite prvotno vrednost. Primer:x--;
. - Postinkrement: Glede
spremenljivka++
, kjespremenljivka
mora biti znakovnega ali številskega tipa, dodajte 1 vspremenljivka
vrednost (shranjevanje rezultata vspremenljivka
) in vrnite prvotno vrednost. Primer:x ++;
. - Predhodno zmanjšanje: Glede
--spremenljivka
, kjespremenljivka
mora biti znakovnega ali številčnega tipa, od njegove vrednosti odšteti 1, rezultat shraniti vspremenljivka
in vrne novo zmanjšano vrednost. Primer:--x;
. - Preinkrement: Glede
++spremenljivka
, kjespremenljivka
mora biti znakovnega ali številskega tipa, vrednosti dodati 1, rezultat shraniti vspremenljivka
in vrne novo povečano vrednost. Primer:++ x;
. - Združevanje nizov: Glede
operand1 + operand2
, kjer je vsaj en operandVrvica
vnesite, dodajteoperand2
predstavljanje niza voperand1
prikaz niza in vrne rezultat. Primer:"A" + "B"
.
Operatorji seštevanja, odštevanja, naknadnega zmanjšanja, naknadnega povečanja, predhodnega seštevanja in predhodnega povečanja lahko ustvarijo vrednosti, ki presegajo meje vrste rezultata. Če na primer dodate dve veliki pozitivni 64-bitni celoštevilski vrednosti, lahko dobite vrednost, ki je ni mogoče predstaviti v 64 bitih. Nastalo prelivanje Java-ovi aditivni operaterji ne zaznajo ali sporočijo.
Zaznavanje prelivanja v knjižnici standardnih razredov Java
Standardna knjižnica predavanj Matematika
razred vključuje metode za odkrivanje prelivov. Na primer, int addExact (int x, int y)
doda vrednosti v x
in y
, vrnitev vsote ali metanje izjeme pri prelivanju.
Primer uporabe: Aditivni operaterji
Seznam 1 predstavlja majhno aplikacijo za igranje z aditivnimi operaterji Java.
Seznam 1. Aditivni operaterji v Javi (AddOp.java)
razred AddOp {public static void main (String [] args) {System.out.println (125 + 463); System.out.println (2,0 - 6,3); int starost = 65; System.out.println (starost); System.out.println (starost--); System.out.println (starost ++); System.out.println (- starost); System.out.println (++ starost); System.out.println ("A" + "B"); }}
V prejšnji vadnici ste se naučili, kako uporabljati JDK-je javac
orodje za sestavljanje izvorne kode Java in java
orodje za zagon nastale aplikacije. Za sestavljanje seznama 1 izvedite naslednji ukaz:
javac AddOp.java
Ob predpostavki uspešne kompilacije upoštevajte AddOp.class
datoteko v trenutnem imeniku. Za zagon izvedite naslednji ukaz:
java AddOp
AddOp
odgovori tako, da prikaže naslednje rezultate:
588 -4,3 65 65 64 64 65 AB
Študija tega izhoda ponuja vpogled v operaterje postinkrementa, postdekrementa, predinkrementa in predhodnega dekrementa. Za postincrement / postdecrement, starost
Trenutna vrednost se izpiše pred postopkom povečevanja / zmanjšanja. Za predhodno povečanje / predhodno določanje se izvede operacija, njen rezultat pa se shrani v starost
, in potem starost
je izpisana nova vrednost.
Ponavljanje z operaterji Java
Operatorji aditivov so še posebej uporabni v kontekstu ponovitev, kjer se uporabljajo za napredovanje do naslednje ponovitve. Izjave o ponovitvah boste izvedeli v naslednji vadnici Java 101.
Operator indeksnega polja
The indeksni operator operator ([]
) dostopa do elementa matrike z zagotavljanjem elementov indeks (položaj). Ta operater je postavljen za imenom spremenljivke polja, kot v ocene [0]
(dostop do prvega elementa v matriki, ki je dodeljena ocene
; prvi element je shranjen pod indeksom 0). Tu je formalna opredelitev:
Glede na to spremenljivka[indeks]
, kje indeks
mora biti celo število (int
) vnesite, preberite vrednost iz ali shranite vrednost v spremenljivka
shranjevalni element na lokaciji indeks
. Primer: temperature [1]
Vrednost posredovana indeks
je 32-bitno celo število, ki je bodisi 0 bodisi pozitivna vrednost v območju do ene manjše od dolžine polja, kar je označeno z dodajanjem .length
do imena polja. Na primer, razredi.dolžina
vrne število elementov v matriki, dodeljenih ocene
.
Spremenljivke matrike vs nizi
ocene
ni matrika, ampak je spremenljivka, ki vsebuje sklic na področje pomnilnika, ki tvori matriko. To velja za vse nize Java. Vendar je običajno omeniti ocene
ali katero koli spremenljivko polja kot matriko.
Primer aplikacije: Operator indeksa polja
Seznam 2 predstavlja izvorno kodo za primer aplikacije, ki vam omogoča igranje z operatorjem indeksa polja.
Seznam 2. Operator indeksnega polja v Javi (ArrayIndexOp.java)
class ArrayIndexOp {public static void main (String [] args) {int [] grade = {89, 90, 68, 73, 79}; System.out.println (ocene [1]); ocene [1] = 91; System.out.println (ocene [1]); indeks int = 4; System.out.println (ocene [indeks]); System.out.println (ocene ['C' - 'A']); // System.out.println (ocene [1D]); }}
Seznam 2 je nekoliko bolj zanimiv kot seznam 1. Po ustvarjanju enodimenzionalne matrike celih števil (prek inicializatorja matrike) in dodelitvi sklica matrike na ocene
, glavni ()
dostop do različnih elementov. Dva predmeta sta še posebej zanimiva:
- Indeks operatorja indeksa polja mora biti na koncu 32-bitno celo število (0 ali pozitivna vrednost). Določite lahko ime celoštevilčne spremenljivke (npr.
indeks
), ki vsebuje vrednost indeksa kot indeks. - Določite lahko izračun, ki vključuje znakovne literale. (Kasneje v tej vadnici bom predstavil pretvorbe tipov in odkrili boste, zakaj
"C" - "A"
ustvari celo število (2), ki služi kot veljaven indeks.)
Končni primer, ki gre 1D
kot indeks za operator indeksa polja, je komentiran, ker se ne bo prevedel. Če prekomentirate vrstico in poskusite sestaviti seznam 2, boste prejeli sporočilo o napaki o nezdružljivih vrstah: "možna pretvorba izgub z dvojno
do int.
."
Sestavi seznam 2 (javac ArrayIndexOp.java
) in zaženite aplikacijo (java ArrayIndexOp
). Upoštevati morate naslednje rezultate:
90 91 79 68
Indeks matrike in večdimenzionalni nizi
Ta operator lahko uporabite z večdimenzionalnimi nizi. Na primer, če predpostavimo dvodimenzionalnost stroškov
matrika, stroški [0] [1]
dostopa do elementa, dodeljenega prvi vrstici (prek [0]
) in drugi stolpec (prek [1]
).
Operatorji dodeljevanja
The operater dodelitve (=
) spremenljivki dodeli vrednost izraza (npr. i = 6;
), vključno z elementom matrike (npr. x [0] = 15;
). Izraz in spremenljivka morata biti dodelitev združljiva, kar pomeni, da se morajo njihove vrste strinjati. Na primer, celoštevilčni spremenljivki ne morete dodeliti nizovne dobesedne črke. O tem bom razložil več, ko bomo razpravljali o pretvorbah tipov.
Operatorji sestavljene dodelitve (+=
, -=
, *=
, /=
, %=
, &=
, |=
, ^=
, <<=
, >>=
, >>>=
) v enem koraku ovrednoti izraze in rezultate pripiši spremenljivkam. Vsak izraz in spremenljivka morata biti združljivi z dodelitvijo. Vsak operater služi kot uporabna bližnjica. Na primer, namesto da bi navedli x = x + 3;
, lahko določite krajše in enakovredno x + = 3;
.
Naj bo kratko!
Namesto da bi navedli x = x + 1;
ali x = x - 1;
, lahko določite krajše x + = 1;
ali x - = 1;
. Lahko bi prihranili še več pritiski tipk z določitvijo krajših x ++;
ali x--;
.