Kompileerimisüksus
Java-programmi tekst koosneb klasside (class) ja/või liideste (interface) kirjeldustest. Preprotsessorit teksti eeltöötluseks ei kasutata.
Kompileerimisüksus (ingl.k. compilation unit) on Java lähtetekst (faililaiendiga .java), mis reeglina sisaldab ühte avalikku (public) klassi või liidest. Selle klassi/liidese nimi on ühtlasi failinime prefiksiks. NB! Java puhul on suurte-väikeste tähtede erinevus oluline! On kombeks, et klassi/liidese nimi algab suurtähega (vastavalt siis ka failinimi).
Kompileerimisüksus kuulub mingi paketi koosseisu.Kompileerimine
Java kompilaatorile javac antakse ette kompileerimisüksus (näit. HelloApplet.java) ja kui vigu ei teki, siis on tulemuseks transleeritud klass(id) faililaiendiga .class (näit. HelloApplet.class). Transleeritud klasside formaadiks on platvormist sõltumatu Java virtuaalmasina baitkood.javac HelloApplet.javaKui kompileerimisüksus on jooksvas kataloogis, siis pole klassitee (ingl.k. class path) määramine tavaliselt vajalik. Kui kompilaatorile on tarvis kirjeldada teed vajalike transleeritud klassideni, siis võib seda teha käsurea parameetriga -classpath või läbi keskkonnamuutuja CLASSPATH . Kui transleeritud klassid tuleb paigutada mingisse muusse kataloogi, siis saab seda teha käsurea parameetri -d abil.Pakett
Pakett (ingl.k. package) on loogiliselt seotud kompileerimisüksuste hulk (n.ö. teek). Pakettide nimed on liitnimed, milles nimeosad kirjutatakse väiketähtedega ja nende eraldajana kasutatakse punkti (näit. java.awt.event). Üldisemad nimeosad paiknevad eespool.
Liitnimi on vajalik paketile viitamiseks failisüsteemis - Java keele seisukohalt on paketinimed kõik samal tasemel (puudub alampaketi mõiste). Paketid võimaldavad klasse grupeerida ja määrata meetodite nähtavuspiirkonda.
Nende klasside kasutamiseks, mis paiknevad mingi paketi koosseisus, nad imporditakse (import). Pakett java.langimporditakse vaikimisi.
Paketikirjeldus (package) määrab antud kompileerimisüksuse jaoks, millisesse paketti ta kuulub. Kõik need kompileerimisüksused, millel paketikirjeldus puudub, kuuluvad ühte suurde nimetusse paketti.Klass
Klass sisaldab klassimuutujaid, klassimeetodeid, algatajaid, konstruktoreid, isendimuutujaid ja isendimeetodeid (hetkel ei anna täpset definitsiooni, klassi omadused on reeglina static). Klass on alati mingi teise klassi alamklass (extends-täiend), kui sellekohane viide puudub, siis java.lang.Object alamklass.Programmi käivitamine käsurealt
Käsurealt saab käivitada neid klasse, milles leidub klassimeetod, mille signatuur (nimi ja parameetrite tüübid) on:public static void main (String[] kasureaparameetrid)s.t. avaliku (public) klassimeetodi (static) nimi on main, tagastatav väärtus puudub (void) ja sisendparameetriks on stringide massiiv. Seda nim. Java rakenduseks (application).
Interpretaator java peab paiknema käivitatavate programmide otsimisteel ning klass peab olema transleeritud ning paiknema klassiteel (jooksev kataloog on tavaliselt klassiteel). Näit.:java HelloWeb [kui vaja, siis siin järel parameetrid]Klassifaili laiendit .class ei kirjutata, suur- ja väiketähtede erinevus on oluline.
Klassiteed saab määrata käsurea parameetriga -classpath või keskkonnamuutujaga CLASSPATH .
Rakend
Rakend (ingl.k. applet) on klassi java.applet.Applet (või mõne selle alamklassi) isend, mida saab paigutada veebilehele ja käivitada veebilehitsejas.
Veebilehel (s.t. vastavas html-failis) määrab rakendi omadused applet-märgis (ingl.k. applet-tag), mille kohustuslikeks parameetriteks on code (klassi nimi), width (rakendi akna laius pikselites) ning height (akna kõrgus).
Silumiseks saab kasutada ka programmi appletviewer veebilehitseja asemel.
Rakendi nähtavaks muutmisel on üheks võimaluseks üle katta meetod paint() signatuuriga:public void paint (java.awt.Graphics aken)Rakendite silumisel tuleb luua applet-märgistega veebileht, mis viitab silutavale klassile (s.t. transleeritud klassile laiendiga .class). Klassi transleerimine toimub tavalisel viisil javac abil.
Java leksika
Kommentaarid
C tüüpi kommentaarid (ei soovitata)
/* Mitu
ridakommentaare */Erikujulised kommentaarid (javadoc)
/*** Klassi kirjeldus.* @author Jaanus Pöial* @version 1.00* @since JDK 1.5*/C++ tüüpi kommentaarid (eelistatud)
// rea lõpuni kommentaar//=================================// Selliseid eraldamisi hea teha//=================================Tüübid ja väärtused
Algtüübid (ingl.k. primitive types)
- byte - 8-bitine täisarv vahemikus -128 kuni 127. Näit. (byte)31, (byte)0x1f,(byte)037
- short - 16-bitine täisarv vahemikus -32768 kuni 32767. Näit. (short)255, (short)0xff,(short)0377
- int - 32-bitine täisarv vahemikus -2147483648 kuni 2147483647. Näit. -25, 0x84ed1,0265475,1234567890
- long - 64-bitine täisarv vahemikus -9223372036854775808 kuni 9223372036854775807. Näit. 12L,-0xfcd45dL,03451207564302L
- float - 32-bitine ujupunktarv ligikaudses vahemikus -3,4x1038 kuni 3,4x1038 seitsme tüvekohaga. Näit. -5.4F, 32e+17F, 0.5e-6F
- double - 64-bitine ujupunktarv ligikaudses vahemikus -1,7x10308 kuni 1,7x10308 15 tüvekohaga. Näit. 8.3, -5e-100
- char - 16-bitine Unicode sümbol. Näit. 'a', '\n', \u00ff
- boolean - tõeväärtustüüp võimalike väärtustega true ja false.
Tühitüüp
void - tagastustüüp meetoditele, mis väärtust ei tagasta.
Sõned
Keeles Java on sõned (ingl.k. string) "tõelised" objektid, mis kuuluvad klassi java.lang.String. Näit. "See on sõne", "Kaks\nrida". Selle klassi olulisteks isendimeetoditeks on compareTo(), equals(), length(), concat(), toString(), indexOf(), substring(), replace(), trim(), jpt. ning klassimeetodiks valueOf()(vt. API kirjeldus).
Kui on tarvis tegelda programselt muutuvate sõnedega, on soovitav kasutada klassi java.lang.StringBuffer ja selle meetodeid append(), insert(), toString(), jne.Mähisklassid (ingl.k. wrapper classes)
Kuuluvad paketti java.lang ja on kasutusel siis, kui algtüüpi väärtust on tarvis käsitleda objektina ning mitmesuguste tüübiteisenduste juures. Alates Java 5 versioonist tehakse paljud teisendused mähisklassi ning algtüübi vahel automaatselt.
- Byte
- Short
- Integer
- Long
- Float
- Double
- Character
- Boolean
Näit.
Integer intObjekt = new Integer(245);
int o = intObjekt.intValue();//245
String s = String.valueOf(o);//"245"
Integer teineObjekt = Integer.valueOf(s);
Objektitüüp
Klassi nimi on keeles Java kasutusel ka tüübi määrajana. Näit. String s, Object o, java.awt.Frame raam.
Universaalne konstant null näitab objekti puudumist.
Viitamiseks parasjagu töödeldavale objektile meetodi tekstis kasutatakse objekti nimena võtmesõna this, kui soovitakse viidata ülemklassi meetodile või üledefineeritud muutujale, siis võtmesõna super.
Avaldis
Matemaatilised funktsioonid
Kuuluvad klassimeetoditena java.lang.Math klassi. Enamasti kasutavad ja tagastavad double-tüüpi väärtusi, aga ka muid arvutüüpe.
Näit. int juh = (int) Math.round (Math.random()*6.0 + 0.5);
- abs
- acos, asin, atan, atan2
- ceil, floor, round
- sin, cos, tan
- exp, log, pow
- min, max
- sqrt
- random
- ...
Operaatorid
Loogikatehetest aitavad aru saada joonis1 ja joonis2.
Unaarsed, binaarsed ja ternaarsed operaatorid. Prioriteedilt erinevad rühmad (kui on kahtlusi, kasutage ümarsulge!). Üldiselt väärtustatakse vasakult paremale, v.a. unaarsed prefiksoperaatorid, ternaarne tingimuslik operaator ning omistamisoperaatorid. Esitame prioriteetide kahanemise järjekorras.Kõrgeima prioriteediga tehted (väärtustatakse vasakult paremale):
- teate saatmine - punkt:
objekt/Klass . muutuja/meetod()
- parameetrisulud () :
(parameetrid)
- masiivielement [] :
[ indeks]
- unaarne postfiks-suurendamine ++ :
avaldis++
- unaarne postfiks-vähendamine -- :
avaldis--
Unaarsed prefiksoperaatorid (väärtustatakse paremalt vasakule):
- unaarne prefiks-suurendamine ++ :
++avaldis
- unaarne prefiks-vähendamine -- :
--avaldis
- unaarsed pluss ja miinus:
+ avaldis
-avaldis
- bitikaupa eitus ~ :
~ avaldis
- loogiline eitus ! :
! loogiline_avaldis
Isendiloome ja tüübiteisendus (ingl.k. casting):
- isendiloome new :
new konstruktor(parameetrid)
- tüübiteisendus () :
(tüüp)avaldis
Korrutamine/jagamine (vasakult paremale):
- korrutamine * :
avaldis * avaldis
- jagamine / :
avaldis / avaldis
- jääk % :
avaldis %avaldis
Liitmine/lahutamine (vasakult paremale):
- liitmine + :
avaldis + avaldis
- sõnede konkatenatsioon + :
sõne + sõne
- lahutamine - :
avaldis - avaldis
Nihutamine (väärtustatakse vasakult paremale):
- nihutamine vasakule << :
avaldis << kohtade_arv
Võrdlemine (vasakult paremale), binaarsed operaatorid:
- aritmeetiline nihutamine paremale >>:
avaldis >> kohtade_arv
- loogiline nihutamine paremale >>>:
avaldis >>> kohtade_arv
- väiksem < :
avaldis < avaldis
- väiksem-võrdne <= :
avaldis <= avaldis
- suurem > :
avaldis > avaldis
- suurem-võrdne >= :
avaldis >= avaldis
Võrdumine (vasakult paremale):
- isend on klassist - instanceof :
isend instanceof Klass
- võrdne == :
avaldis == avaldis
- mittevõrdne != :
avaldis != avaldis
Konjunktsioon AND (vasakult paremale):
Algtüüpide korral võrreldakse väärtusi, objektide korral osuteid (identsust).
- bitikaupa & :
avaldis & avaldis
Mitteekvivalents XOR (vasakult paremale):
- bitikaupa ^ :
avaldis ^ avaldis
Disjunktsioon OR (vasakult paremale):
- bitikaupa | :
avaldis | avaldis
Tingimuslik konjunktsioon; kui esimene väär, siis teist ei väärtustata (vasakult paremale):
- tingimuslik AND && :
avaldis && avaldis
Tingimuslik disjunktsioon; kui esimene tõene, siis teist ei väärtustata (vasakult paremale):
- tingimuslik OR || :
avaldis || avaldis
Tingimuslik operaator (paremalt vasakule), NB! madala prioriteediga, tihti tuleb kasutada sulge:
- ternaarne operaator ? : :
Omistamisoperaatorid (paremalt vasakule):
tingimus ? avaldis1 :avaldis2
- lihtomistamine = :
L-väärtus = avaldis
- tehe koos omistamisega:
L-väärtustehe = avaldis
+= -= *= /= %= <<= >>= >>>= &= ^= |=
Piiritlejad (modifikaatorid)
Klasside ja liideste piiritlejad
- piiritlejate puudumisel on klassid nähtavad oma paketi piires.
- public - klassid on nähtavad omas paketis ning kõikjal, kus neid imporditakse. Ühes Java-failis saab olla ülimalt üks public-klass.
- abstract - klass võib sisaldada abstraktseid meetodeid, isendite loomine ei ole võimalik, liideste puhul kehtib vaikimisi.
- final - klassi ei saa spetsialiseerida (tuletada alamklasse). Näit. String on niisugune klass.
Muutujate ja meetodite piiritlejad
- piiritlejate puudumisel on muutujad ja meetodid kõigis sama paketi klassides kättesaadavad [ja päranduvad kõigisse alamklassidesse, mis paiknevad samas paketis].
- public - muutujad ja meetodid on kättesaadavad kõikjal (import) ja päranduvad sama klassi alamklassidesse.
- protected - muutujad ja meetodid on kättesaadavad kõigis sama paketi klassides ja päranduvad sama klassi alamklassidesse.
- private - muutujad ja meetodid pole kättesaadavad üheski teises klassis ega pärandu ühessegi alamklassi.
- abstract - meetodi sisu pole määratud, see tuleb määrata (üle katta) pärimisel.
- final - muutuja on konstant (selle nimi on soovitav kirjutada ainult suurtähtedega), meetod ei ole üle kaetav.
- native - meetodi sisu on programmeeritud mingis muus keeles/keskkonnas.
- static - klassimuutujad ja klassimeetodid (pole üle kaetavad).
- synchronized - meetod lukustab töödeldava objekti (this) teiste lõimede eest.
Laused (direktiivid)
Kokkuvõtvalt joonis1 ja joonis2
Plokk
{ [kirjeldused ja direktiivid] }Plokk võimaldab ühendada mitut lauset üheks tervikuks (üheks direktiiviks). Ploki sulgude paigutamisel/treppimisel on soovitused iga erijuhu jaoks, mida tuleks jälgida.
Ploki sees kirjeldatud muutujad on lokaalsed (nähtavad ainult selles plokis).
;Javas lõpeb lause kas semikooloni või plokki lõpetava suluga. Alati võib lause kohal olla lihtsalt semikoolon (tühidirektiiv).
Avaldisdirektiiv
avaldis;Näiteks meetodi poole pöördumine või omistamine.
Naasmisdirektiiv
return [avaldis];Kasutatakse meetodi töö lõpetamiseks. Edastab antud meetodi töö tulemuse seda välja kutsunud meetodile.
Juhtimisstruktuurid
Tingimusdirektiiv
Võimaldab teha programmis hargnemisi vastavalt antud tingimuste täidetusele.Näide
if (tingimus) direktiiv;if (tingimus) direktiiv1; else direktiiv2;Kombineerimine ja treppimine
if (tingimus) {
direktiivid ... ;} else if (tingimus2) {
direktiivid2 ... ;} else {
direktiivid3 ... ;}Eelkontrolliga tsüklidirektiiv
Tsükli sisu täidetakse juhul, kui antud tingimus on tõene.
while (tingimus) direktiiv;
while (jätkamistingimus) {
direktiivid ... ;}Järelkontrolliga tsüklidirektiiv
Näide
do direktiiv while (tingimus);
do {
direktiivid...;} while (jätkamistingimus);Üldtsüklidirektiiv
Tsükli päis koosneb kolmest osast: initsialiseerimine, jätkamistingimus ja sammu järel tehtav tegevus. Tsükli sisu täidetakse juhul, kui jätkamistingimus on tõene.Näide 1
Näide 2
Näide 3
for (eeltegevused; jätkamistingimus;sammu_järeltegevused)direktiiv;
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println ("i=" + i + "; j=" + j);}Tsükkel üle kogumi (alates Java 5)
for (objekt : kogum) direktiiv;
public static void main (String[] args) {
for (String arg : args)
System.out.print (arg + " ");
}
Katkestusdirektiiv
Tsüklist või lülitidirektiivist väljumine.Näide
break [märgend];
Soovitatakse kasutada ainult lülitidirektiivi harudesJätkamisdirektiiv
Tsüklisammu lõpetamine.
continue [märgend];
Ei soovitata üldse kasutadaLülitidirektiiv
Valik lüliti väärtuse järgi (täisarvud, loend, char, boolean, alates jdk1.7 String).Näide 1
Näide 2
switch (avaldis) {
case avaldis1:
direktiivid1;case avaldis2:
direktiivid2;...default:
direktiivid;}Haru lõppedes minnakse vaikimisi järgmisesse harusse (kumulatiivne efekt), seega tuleks haru lõpus üldiselt kasutada katkestusdirektiivi (sagedane vigade allikas).