Süntaks Sissejuhatus Objektorienteeritud Java keeles peab kogu kirjutatav kood olema meetodis (ehk funktsioonis), mis omakorda kuulub mingi objektitüüpi ehk klassi koosseisu. Lihtsas programmis saab läbi ühe meetodi ning klassiga, kuid vähegi suuremas programmis on sageli otstarbekas iseseisvad osad eraldi kirjutada. Mõnikord see küll suurendab veidi töövaeva, kuid väiksemaid lõike on lihtsam kontrollida ning tulemus on töökindlam ja vajadusel kergemini täiendatav. Lihtsaimale java-programmile: public class Tervitus{ public static void main(String argumendid[]){ System.out.println("Tere"); } } vastaks pascali-programm begin writeln('Tere'); end. Nagu näha, kulub alustamise ja lihtsa väljundi jaoks märgatavalt enam ruumi. Ka mõnes muus kohas võib java kood pascali omast märgatavalt enam ruumi võtta ning lisaks sellele tundub kompilaator algul mitmes kohas tüütu tähenärijana, teatades kümnetest vigadest, mida sa oled sisse kirjutamise ajal teinud, kirjutades näiteks suure tähe asemele väikese või ajades muutuja deklareerimisel midagi segamini. Pascali programm oleks selle aja peale juba ammu tööle hakanud, kui java juures tuleb alles trükivigadega maadelda. Juba pisut suuremate, nii paarileheküljeliste programmide juures annab tunda, et tähenärimisest on ka kasu. Liiatigi veel siis, kui tuleb hakata kokku panema ammuunustatud ning vastvalminud programmilõike. Andmetüübid, tsüklid, valikud Muutujad, tsüklid ja valikud on Javas olemas nagu Pascalis või mõnes muuski programmeerimiskeeles. Tüüpiline täisarv on int, reaalarv double ja sõne String. String on suure tähega, kuna ta on struktuurne andmetüüp, muud on lihttüübid. Näide: public class Tyybid{ public static void main(String argumendid[]){ int rida=0, ridadearv; String ese="auto"; ridadearv=5; while(rida=0)|(rida.indexOf("A")>=0)){ System.out.println(rida+" "+pikkus); kokku=kokku+pikkus; } rida=rf.readLine(); } System.out.println("A tähte sisaldavate ridade kogupikkus on "+ kokku+" tähemärki."); } } --- Import käsk teatab kompilaatorile ning intepretaatorile klassi asukoha. Siin näiteks antakse teada, et klass RandomAccessFile asub paketis nimega java.io . Kogu järgnev programm kuulub klassi Tekstifail1 (jääb temale kuuluvate loogeliste sulgude sisse). Trepitakse nii, et iga algus ja lõpp oleksid sama suure taandega. Sellesse klassi kuulub vaid üks meetod, nimega main. Programmi käivitamisel asutakse täitma selles meetodis asuvaid korraldusi. Public tähendab, et temale on võimalik ligi pääseda ka väljastpoolt klassi (et saaksime ta käivitada), static lubab käivitada ilma eraldi isendit (objekti) loomata ning void ütleb, et meetod ei väljasta midagi (nii nagu protseduur pascalis). Parameetriks saab meetod sõnemassiivi käsurea parameetritest. Kui parameetrid puuduvad, siis on massiivi pikkuseks 0. Juhul kui argumentide massiivi pikkuseks pole 1, teatatakse failinime puudumisest ning lõpetatakse programmi töö. Juhul kui fail leidub, luuaks juhupöördusfaili tüüpi objekt rf tema andmete lugemiseks. Massiivi elemente hakatakse lugema alates kohast 0, nii et argumendid[0] on esimene parameetristring. Lause rida=rf.readLine() loeb failist ühe rea (s.t. tähed kuni reavahetussümbolini), loob sellest sõne-isendi ning paneb muutuja nimega rida osutama sellele. Tingimuses kontrollitakse, kas loetud reas leidub a või A. Püstkriips on sama, mis Pascali puhul or. Arvutamine Tähtsamad matemaatikafunktsioonid asuvad klassis Math. Nagu mujalgi, nii ka siin tuleb meetodi välja kutsumiseks määrata meetodi omanik (siin klass Math) ning siis meetodi nimi. public class Arvutus1{ public static void main(String argumendid[]){ double x=Math.PI/6; double siinus=Math.sin(x); System.out.println("Nurk x="+x+" sin(x)="+siinus); System.out.println(" cos(x)="+Math.cos(x)+" tan(x)="+Math.tan(x)); x=Math.random(); int a=(int)(5*Math.random()); double kuup=Math.pow(x, 3); System.out.println("x="+x+" a="+a+" x^3="+kuup); } } Meetod Math.random() väljastab juhusliku reaalarvu nulli ja ühe vahelt. Kui soovitakse täisarvulist juhuarvu, siis saab ühe võimalusena korrutada saadud reaalarv arvuga, kui suures vahemikus tahetakse juhuarvu saada ning siis võtta täisosa, nagu siin näites on tehtud. Kui pascalis tuli reaalarvust täisarvu saamiseks kasutada funktsiooni round, siis java puhul on lubatud reaalarvu täisarvuks muutmiseks (ning ka mitmetel muudel juhtudel) kirjutada soovitav andmetüüp avaldise ette sulgudes. Uus tüüp on vaja ette kirjutada juhul, kui tüübimuundamisega võib andmeid kaduma minna. Näiteks int n; n=(int)4.7; annab muutuja n väärtuseks nelja. n=4.7 aga kutsub esile veateate. Tüübimuundamine on enam tähtis objektide ja pärimise juures. Java keele kasutamisel on abiks sõnastik ehk API spetsifikatsioon. Nagu (võõr)keele juures pole lootust kõiki sõnu ja väljendeid pähe õppida, nii pole ka programmeerimiskeele juures vaja sellega liigselt vaeva näha. Mis kulub pähe see kulub, kuid unustamise puhuks on alati manuaal olemas, tuleb vaid osata seda kasutada. Kui 1995 aastal välja tulnud java-versioonis olid ametlikud kuus paketti kümnete klasside ning tuhatkonna meetodiga, siis 1999. aasta keskpaigaks on SUN välja lasknud juba 50 paketti ligi tuhande klassi ning kahekümne tuhande meetodiga. Vaevalt nende loetelu võtab mitusada lehekülje rääkimata lähematest kirjeldustest. Enamikus lühemates programmides saab läbi kuni kümne klassi ning saja meetodiga, kuid keerulilsemate olukordade puhul on võimalus varust omale sõnastikust abi otsida. Hierarhia ja viidete abil on sealt täiesti lootust midagi leida. Seletan siinkohal lahti manuaali seletused kahe meetodi kohta paketist java.lang.Math. Kopeeritult näevad nad välja järgmised: static double log(double a) Returns the natural logarithm (base e) of a double value. static double max(double a, double b) Returns the greater of two double values. Esimese meetodi nimi on log ning ta saab omale parametriks double tüüpi reaalarvu. (Et muutuja nimeks on a, see ei muuda kasutamisel midagi.) Meetod väljastab väärtuse samuti tüübist double. Static tähendab, et meetod kuulub klassi (mitte isendi) juurde. Sellest edaspidi. Seletus juures teatab, et (meetod) tagastab naturaallogaritmi (alusel e) (parameetrina antud) double tüüpi väärtusest. Kasutada saab seda näiteks double x=Math.log(3.5); Siinkirjeldatud meetod max väljastab samuti topelttäpsusega reaalarvu (double), väljastades suurema etteantud parameetritest. Klassi String isendimeetod (static puudub) väljastab sõne pikkuse täisarvuna. int length() Returns the length of this string. Kokkuvõte Programmi käskudeks on valmis olevate klasside meetodid. Käskude jada moodustab meetodi, meetodid klassi. Programmi käivitamisel asutakse täitma meetodit nimega main. While-tsükkel töötab nagu pascalis. Tsükli sisu täidetakse senikaua kui tingimus on tõene. For-tsüklis on lisatud koht eel- väärtustamiseks enne tsüklisse sisenemist ning tsüklimuutuja väärtuse muutmiseks pärast tsükli sisu läbimist. Käsusulgudeks on loogelised sulud {}. If-valikut täidetakse juhul, kui tingimus on tõene. Vajadusel võib lisada ka else-osa. Sõne pikkusel on piiriks vaid mälumaht. Ta on objekt erinevalt lihttüüpidena olevast täis- ning reaalarvust. Temalt saab küsida tema omadusi (nt. pikkust, alamsõnet) meetodi käivitamise teel. Põhilised arvutusoperatsioonid paiknevad klassis Math. Vanu võimalusi meelde tuletada ning uusi leida saab API spetsifikatsioonist.