+ All Categories
Home > Documents > Learn java by Alex 2011.pdf

Learn java by Alex 2011.pdf

Date post: 06-Jul-2018
Category:
Upload: anonymous-m2iwcy
View: 227 times
Download: 0 times
Share this document with a friend

of 39

Transcript
  • 8/17/2019 Learn java by Alex 2011.pdf

    1/39

    Java algajatele(v1.0 2011a) See on juhend kiireks Java õppimiseks, esialgsete teadmiste omandamiseks. Näited teen

    eclipse’iga. Koostanud Alex. Email: [email protected]. Tänud Roelile, kes leidis kirja- ja

    muid näpuvigasid ning tegi huvitavaid soovitusi manuaali redigeerimiseks/täiendamiseks!

    I.  Valmistumine programmi kirjutamiseks.

    Alustame kõige lihtsamast asjast ehk põhimõttest. Programm koosneb pakettidest. Pakett

    koosneb klassidest, millest üks alati on main class, mis jooksutab teisi klasse. Main klassi all

    mõtlen ma seda, et meil on üks suvalise nimega klass, mis hoiab endas staatilist main

    nimega funktsiooni (sellest veidi hiljem). Klassid on selleks, et hoida erinevaid programmi osi

    eraldi. Näitena võib tuua maja. Maja puhul on klassideks näiteks sein, aken, uks, katus,

    vundament jne. Maja elamiskõlblikuks muutumiseks on vaja Main klassi. Klassid koosnevad

    funktsioonidest.

    Java programm koosneb pakettidest, pakid aga klassidest. Maja näite puhul on pakiks maa-

    ala, millel maja asetseb.

    Programm kasutab erinevate tüüpidega muutujaid, ühed hoiavad endas numbreid, teised

    sõnu (stringe), kolmandad jah või ei väärtust (boolean) jne. 

    Alustame projekti tegemisest. Teeme uue projekti.

    Anname sellele nime. Otsime selle kataloogi puust üles ja leiame source’i (src). Lisame sinna

    uue paketi ja paketi sisse ühe uue klassi. Nõnda loome aluse lihtsa ühe klassiga programmi

    kirjutamiseks. Paketile ja klassile tuleb anda nimi. Anname paketile nimeks näiteks „paki“ ja

    klassile „Program“. 

    mailto:[email protected]:[email protected]:[email protected]:[email protected]

  • 8/17/2019 Learn java by Alex 2011.pdf

    2/39

    Paketi loomine:

    Klassi loomine:

    Nüüd, kui klass pole veel avanenud, teeme kataloogipuus sellele topelt klõpsu, meile avaneb

    selline pilt:

  • 8/17/2019 Learn java by Alex 2011.pdf

    3/39

    Et meie ühe klassiga programm töötaks, peame me tegema sellest klassist Main klassi, sest

    nagu eelnevalt öeldud, iga programm peab sisaldama Main klassi. Kirjutame main juurde

     järgneva funktsiooni. Funktsioonidest konkreetsemalt teeme juttu pärast poole. Seega näeb

    asi peale muutmist välja nii: 

  • 8/17/2019 Learn java by Alex 2011.pdf

    4/39

     

    II.  Lihtsa programmi kirjutamine, muutujad.1. Nagu igas teiseski keeles, on programmi lahutamatu osa informatsiooni väljastamine.

    Javas, kui me tahame midagi väljastada, on olemas lause System.out.println(), kus

    sulgudesse läheb informatsioon, mida tahame väljastada konsoolile. Konsool avaneb

    programmi käivitamisel (Näites on see vasakul üleval olev roheline nupuke). Konsool ei

    pruugi avaneda paremal, nagu näites, aga seda saab liigutada soovitud kohta. 

    2. Iga koodirida lõpeb semikooloniga, et käskudel vahet teha.

    Käsud täidetakse alati järjekorras. Väljastame tervituse konsoolile. 

    3. Õppime kasutama muutujaid. Alustame kõige enam kasutatavatest muutujatest.

    Deklareerime muutuja ja anname talle algse väärtuse. Väljastame muutujad konsoolile. 

    Kuidas deklareerida? See käib üldise reegli järgi: 

    Tüüp nimi = algväärtus; 

    Peame meelde jätma, et:

    a) teksti kirjutame alati jutumärkidesse! 

    b) Numbri kirjutame jutumärkidesse vaid siis, kui tahame, et see oleks tekstilise

    tähendusega. Üldjuhul on see ilma jutumärkideta. 

    c) Jah-ei väärtuse korral kirjutame algväärtuseks kas true(jah, tõde) või false(ei, vale), muid

    variante pole.

    d) kommentaari ette paneme alati kaks kaldkriipsu, seda lauset programm ei loe.

    DEKLARATSIOON:

    String tekst = “Tere hommikust!“; - tüüpi String deklareerime ALATI suure S tähega, kuid

    see on ainuke muutuja tüüp, mis suure tähega algab. Nimi võib olla enda vabalt valitud ja see

    võib sisaldada ka numbrit. 

    int number1= 10;  - Me ei pane numbrit jutumärkidesse, kui me tahame seda kasutada

    numbrilises mõttes (näiteks erinevad tehted). Algväärtuseks paneme 10. 

  • 8/17/2019 Learn java by Alex 2011.pdf

    5/39

    Boolean b = true;  - jah-ei tüüp, algväärtus true ehk jah. 

    Vaatame näidet. Demonstreerin muutujate väljastamist konsoolile.

    Numbritega saab teha tehteid. Stringe saab kokku liita.

    Stringe liidetakse kokku märgi abil. Näiteks ’’laste’’’’aed’’ annab tulemuseks ’’lasteaed’’,aga ’’laste ’’’’aed’’ annab tulemuseks ’’laste aed’’. Vahe on selles tühikus. Tühik on samuti

    teksti üks osa. Väljastame muutujad konsoolile. Näites on tehtud int-idega ka tehteid ja

    Stringe liidetud. Samuti väljastatud jah-ei väärtusega muutujad. 

    AGA MILLEKS MUUTUJAD? Selleks, et muutujate väärtust saaks alati muuta.

    Algväärtus on vaid see väärtus, mis on antud talle algul. Vaadakem järgmist näidet! 

    Muutuja väärtuse muutmisel enam tüüpi ette ei anta. Konsoolile trükitakse viimane väärtus,

    sest programm täidab käsud järjekorras. Enne, kui info väljastatakse konsoolile, muutubmuutuja „suvalinetekst“ väärtus.

  • 8/17/2019 Learn java by Alex 2011.pdf

    6/39

    Juhul, kui System.out.println(suvalinetekst); oleks olnud järjekorras teine, mis oleks juhtunud

    siis? – konsoolile oleks trükitud esimene väärtus, sest väärtus muutub alles pärast muutuja

    konsoolile väljastamist. 

    ---------------------------------------------------------------------------------------------------------------------------

    Vaatame järgmist näidet. Vaatame int-ide tehteid ja Stringide liitmist. Nagu näha, saamemuutujate väärtuseks omistada teisi muutujaid või tehteid nendega. Samuti pöörakem

    tähelepanu reale cba=cbaabc. Me näeme, et saame, kasutada muutujat ennast väärtuse

    muutmisel.

    AGA!: Tasub meeles pidada, et int, String ja boolean pole ainsad muutujate tüübid. Neid onveel, näiteks char, mis on ainult ühe tähe deklareerimiseks. PS! Tähe deklareerimisel

    kasutatakse ülakomasid, nt char a = ’b’! 

    DEKLARATSIOON 2:

    Jagame muutujad kahte gruppi: Ühed on funktsiooniSISESED ja teised funktsiooniVÄLISED.

    Funktsioonideni jõuame natukene hiljem, ent teadmiseks: 

    public static void main(String args[]){

    //kood

    }

    See on main’i funktsioon! 

    FunktsiooniSISESED: Kirjutatakse funktsiooni sisse ja neid saab kasutada AINULT funktsiooni

    sees.

    FunktsiooniVÄLISED (globaalsed): Kirjutatakse funktsioonist välja poole, tavaliselt enne

    funktsiooni. Neid muutujaid saab kasutada igas funktsioonis.

  • 8/17/2019 Learn java by Alex 2011.pdf

    7/39

    Siin veel üks AGA!:

    Funktsioonivälistel muutujatel on olemas ka ÕIGUSED! 

    See tähendab, et on olemas privaatsed ja avalikud funktsioonivälised muutujad. 

    Privaatsed: Näiteks private int a = 10; Privaatne õigus lubab kasutada seda int-i ainult sellesklassis, kus ta on deklareeritud.

    Avalik: Näiteks public String b = “koer“; Avalik õigus lubab kasutada seda Stringi ka teistes

    klassides, samuti saab teisest klassist selle Stringi väärtust muuta. 

    Piltlik näide: 

    Nagu näites näha, saab samasuguse nimega deklareerida funktsioonisisese ja –välise muutuja. 

    Selle väljastamisel konsooli prinditakse meile funktsioonisisene muutuja, sest printimine toimub

    funktsioonis ja selles kasutatakse funktsioonisisest muutujat. Ka funktsioonivälist muutujat saab

    printida asendades funktsoonis muutuja nime “this.lalala“-ks, ent seda ei saa teha selles staatilisest

    main funktsioonis.

    Lühidalt: Kui on olemas funktsiooni sisene ja –väline muutuja, mis on sama nimega, siis funktsioonis

    kutsutakse välja sisene muutuja, sest sellel on esmaõigus. Ainult välise muutuja olemasolul

    prinditakse just see väline konsoolile. 

    LISAKS! Muutuja võib olla ka staatiline ehk näiteks static int a = 1; See on funktsiooniväline

    deklareerimine ja lubab eranditult kõigist klassidest saada see int kätte ja muuta seda, mistõttu

    muutuvad ka teiste funktsioonide tulemused, mis kasutavad seda muutujat.

    LISAKS! Muutuja võib olla ka finaalne ehk näiteks final int b = 2; See tähendab, et muutuja omandab

    lõpliku väärtuse ja seda pärast enam muuta ei saa. Võib nii mõnigi kord kasuks tulla! 

  • 8/17/2019 Learn java by Alex 2011.pdf

    8/39

     

    III.  Funktsioonid ja mitu klassi

    Õpime erinevaid funktsioonide tüüpe. Selleks loome uue klassi meie olemasolevasse paketti.

    Nimetame seda „klass1“-ks. Klassi sisse kirjutatakse funktsioonid. Jagame siinkohal funktsioonid

    kahte suurde rühma: Sisendiga ja sisendita funktsioonid. Mõlemad rühmad jagame omakorda veel

    kaheks väiksemaks: tagastusega ja tagastuseta funktsioonid. Piltlikult öeldes: 

    Funktsiooni üldine kuju:

    *avalik või privaatne+ *tagastamise tüüp+ *nimi] [sulgudes sisendid] {

    //kood

    [tagastus, kui on]

    }

    Näide: 

    Public void funktsiooni_nimi(){

    Int a=0;

    }

    PEAME MEELES! 

    Kui tagastamise tüüp on void, siis funktsioonil tagastus puudub!!!

    Kui tagastamise tüüp on String, siis tagastatakse ka String,

    Kui tagastamise tüüp on int, siis tagastatakse ka int, 

    Üldine reegel on, et tagastame selle, mis tagastamise tüübiks määrasime. 

    Vaatame järgmist näidet ja loeme hoolikalt ka kommentaare (rohelises tekstis)

  • 8/17/2019 Learn java by Alex 2011.pdf

    9/39

    Need on sisendita funktsioonid:

    Näites on näha, et kui näiteks String on tagastustüüp, siis me tagastame ka Stringi nimega lol. 

    Samamoodi on ka teiste tagastustüüpide puhul. 

    -----------------------------------------------------------------------------------------------------------------------------------

    Nüüd vaatame sisendiga funktsioone. Sisendid kirjutakse sulgudesse, mis tagastuseta funktsiooni

    puhul pannakse samuti lõppu. 

  • 8/17/2019 Learn java by Alex 2011.pdf

    10/39

    Sisendi määramisel deklareerime sulgudes muutuja ilma algväärtust andmata. See on see muutuja,

    mida me hakkame oma funktsioonis kasutama.

    Vaatame juhtu:

    public String fn(String sona, String lol, int a, int b, int c){

    String xyx;

    xyx=sona+lol;

    c=a+b;

    return xyx;

    }

    Oletame, et funktsiooni tuleb sisse kaks sõna ja kolm numbrit. 

    Seda saame teha funktsiooni välja kutsudes nii – fn(“tere“, “ hommikust“, 1, 2, 3); 

    rida 1. Deklareerime Stringi nimega xyx, aga me ei pea andma talle algväärtust. 

    rida 2. String xyx saab omale väärtuseks “tere“ “hommikust“;rida 3. Int c saab väärtuseks ab, aga pane tähele, me ei deklareeri siin ühtegi olemas olevat

    int-i, sest see on juba kõik sisendite ette andmisel tehtud. 

    rida 4. Tagastame xyx-i, sest tagastustüübiks on määratus String. Kui me oleksime tahtnud

    tagastada näiteks int a-d või hoopis int c-d, siis oleks pidanud funktsioon olema

    public int fn(String sona, String lol, int a, int b, int c).

    Teadmiseks!

    Kui deklareerime: 

    String a; siis see on sama, mis String a = null; see tähendab, et väärtust ei ole. 

    Kui muutuja ei oma väärtust ja sellega tehakse mingeid operatsioone, saame programmikäivitamisel vea! 

    FUNKTSIOONIDE VÄLJAKUTSUMINE: 

    Kaks võimalust: 

    1)  Me kutsume funktsiooni välja samas klassis, kus see on tehtud. Selleks piisab nimest ja

    sisenditest.

    Näiteks, kui meie klassis on olemas

    public void fn(){

    System.out.println(“Tere“);

    }

    Siis kutsume ta välja nimepidi - fn();

    Kui tal on sulgudes sisendid:

    public void fn(String a, int b){

    System.out.println(“Tere“);

    }

    Siis anname need talle kaasa: fn(“hei“, 5); 

  • 8/17/2019 Learn java by Alex 2011.pdf

    11/39

    2)  Kui kutsume välja teisest klassist välja selle funktsiooni, siis on vaja teha funktsiooni

    sisaldavast klassist nii öelda koopia. 

    Selleks on reegel: [Klassinimi] [koopia nimi] = new [Klassinimi]();

    Ehk, kui funktsioon asub klassis nimega “Limbo“ ja meie tahame välja kutsuda selle

    funktsiooni oma Main klassis, siis kirjutame Maini:

    Limbo a = new Limbo();

    Nõnda teeme koopia, anname sellele nime a, ja kutsume välja nii:

    a.fn() või a.fn(“heipsa“, 9);, olenevalt sellest, kas ja mis tüüpi sisendeid see funktsioon tahab

    saada.

    TEADMISEKS! Kui funktsioon tagastab mingi väärtuse, siis võime me selle väärtuse omistada

    mingile muutujale või kasutada vastava funktsiooni väljakutsumist justkui muutujana.

    Näiteks, kui meil klassis Auto selline funktsioon:

    public String autosoidab(){String a = “Auto sõidab!“; 

    return a;

    }

    Siis Mainist välja kutsumisel on igati õige ja veatu kirjutada selline rida:

    Auto b = new Auto();

    String auto = b.autosoidab();

    System.out.println(auto); või System.out.println(b.autosoidab()); 

    String auto saab väärtuseks “Auto sõidab!“ ja System.out.println() funktsioon prindib sellevälja. 

    Näide funktsiooni väljakutsumisest samas klassis (See näide ei tööta, sest Main peaklass ei

    kutsu ühtegi funktsiooni neist välja, küll aga Mainis funktsiooni Tervita() väljakutsumisel

    prinditakse meile välja ka funktsiooni prindiTervitus() tegevus.): 

  • 8/17/2019 Learn java by Alex 2011.pdf

    12/39

    Näide Mainist: ühe funktsiooni välja kutsumine:

    Üks hea progamm koosnebki mitmetest klassidest, mis käivitatakse järjekorras mainist. 

    IV.  Tsüklid Tegutseme näidete lihtsuse mõttes jälle ainult mainis. 

    Tsüklid on selleks, et korrata mingit tegevust või funktsiooni osa. 

    On olemas kahte sorti tsüklid, mida nimetatakse While ja For tsükliteks. 

    For-tsükli puhul teame me täpselt, kui kaua tahame mingit tegevust korrata.

    While tsükkel sobib pigem pikemateks kordamisteks, kus otsitakse kindlat tingimust.

    1)  For tsükli kuju: for(int i=0; i

  • 8/17/2019 Learn java by Alex 2011.pdf

    13/39

    Saame tingimusi muuta endale meelepäraseks, näiteks: 

    Kui me kirjutame x=10, siis see tähendab „väiksem või võrdne kui...“ või „suurem või

    võrdne kui...“-d

    2)  While tsükli kuju: while(tingimus)

    Int x=0;

    While(x

  • 8/17/2019 Learn java by Alex 2011.pdf

    14/39

     

    Peame meeles! Tsükli enneaegseks väljumiseks kasutame käsku break;

    V. 

    IF-lausedIF-lauseid kasutame millegi võrdlemiseks, mingi funktsiooni osa käivitamiseks jne. 

    IF-lause kuju: if(tingimus){}

    Näide:

     Konsoolile trükitakse ainult „tere!“, sest x on 0. 

    Peame meeles, et numbrite võrdlemisel kasutatakse kahte võrdusmärki, SEST ühte

    võrdusmärki kasutatakse muutuja väärtustamisel. Antud juhul me EI SEA muutuja x

    väärtuseks 0 vaid VÕRDLEME x-i ja 0-i omavahel.

  • 8/17/2019 Learn java by Alex 2011.pdf

    15/39

     

    Võrdlemiseks võime kasutada ka võrdlemismärke 

    STRINGI PUHUL ON TEISED LOOD!

    Stringe ei saa me kahe võrdusmärgiga võrrelda...Tingimus töötab nõnda ebakorrektselt!!! 

    Stringide võrdlemiseks kasutatakse java sisse-ehitatud funktsiooni, millest räägin hiljem

    stringitöötlemise peatükis. Hetkel olgu vaid nii palju teada, et võrdlemiseks kasutame

    equals() sisseehitatud funktsiooni.

    Näide: 

  • 8/17/2019 Learn java by Alex 2011.pdf

    16/39

     

    ELSE võimalus Peale if-lauset võib järgneda else if  või else lause, kuhu programm pöördub siis, kui if -lause

    tingimus ei vasta tõele. Else if  puhul saab lisada uue tingimuse, else puhul minnakse sinna alati, kui

    if-lauset ei käivitata mitte tõese tingimuse tõttu. 

    Else näide: 

    Else if näide: 

    EITAMINE! – Me saame küsida kas kaks numbrit on omavahel võrdsed. SAMUTI saame küsidaka seda, kas numbrid EI OLE omavahel võrdsed.

    Selleks – kasutame eitusmärki, milleks on hüüumärk - !Kahe numbri võrdlemisel number1 != number2 tähendab seda, et number1 ei ole number2-ga

    võrdne.

    Stringide puhul – !tekst1.equals(tekst2), tähendab seda, et tekst1 ei ole sama, mis tekst2. 

  • 8/17/2019 Learn java by Alex 2011.pdf

    17/39

     

    Näide: 

    IF-lause sobib suurepäraselt põgenemaks tsüklist, kui tingimus on täidetud. IF-lauset saab kirjutada

    teise IF-lause sisse, samuti saab korraga anda mitu tingimust. 

    Mitme tingimuse andmiseks kasutame sidesõna „ ja“ asemel - && (kaks and-märki) ning „või“ 

    asemel - || (kaks püstkriipsu). 

    Näide: 

    Juhul, kui sidesõnu on palju, võib kasutada sulge. Sulgudes olevad tingimused kontrollitakse

    esmajärjekorras.

  • 8/17/2019 Learn java by Alex 2011.pdf

    18/39

     

    VI.  Massiivid, arraylistidMassiive kasutame, et ühesuguse nime all hoida ühest rohkem erinevaid väärtusi. 

    Deklareerimise kuju: muutujatüüp nimi*+ = new*suurus+; 

    Näiteks int arvud*+ = new int*10+; 

    arvud[0]=4 - see on massiivi nullinda koha väärtustamine 

    arvud[1]=62 – see on massiivi esimese koha väärtustamine 

     jne 10-ni.

    Kõiki massiive loetakse alati nullist alates. Esimene koht on alati muujujanimi[0];

    Samamoodi saab neid konsoolile printida. Näiteks System.out.println(a[1]);

    Kõik väärtused on parem printida tsükli abil. Veenduda, et vahepeal ei ole väärtustamata

    massiivi kohti. 

    Massiivi tüüpideks sobivad kõik javas olemasolevad muutujatüübid. 

    Massiivi on hea kasutada, kui ütleme näiteks autol oleks neli erineva suurusega ratast. 

    Siis: int rattad[] = new int[4];

    a[0]=15a[1]=16

    a[2]=17

    a[3]=14

    Parem on jätta alati üks massiivi koht üle. Selleks on siis a*4+, mis jääb tühjaks. 

    Me võime teha ka mitmemõõtmelisi massiive.

  • 8/17/2019 Learn java by Alex 2011.pdf

    19/39

    Näide: 

    ARRAYLISTID: 

    On selleks, et hoida andmeid nimekirjas. Nimekirjas saab hoida nii ainult ühte tüüpi muutujaid kui 

    ka erinevat tüüpi muutujaid.

    Saab printida nii tervet nimekirja kui ka üksikelementi.

    ArrayListiga on hea hoida näiteks erinevaid nimesid jne. 

    Näide: 

    Andmete lisamine käib java add() sisseehitatud funktsiooni abil. 

    PEA MEELES! Vajalik on ArrayListist nii öelda koopia teha ja anda koopiale nimi. Seejärel saab

    seda kasutada. KINDLASTI on vaja teha ka import, mis lubab ArrayListi kasutada. Seda tehakse

    lausega import java.util.ArrayList; ning see pannakse enne klassi algust.

  • 8/17/2019 Learn java by Alex 2011.pdf

    20/39

    VII.  Stringide töötlemine Tihti on vaja töödelda stringe. Me oskame juba Stringe liita, neid võrrelda. Kindlasti kuluks

    ära ka teadmised, kuidas leida mingit osa Stringist. Veenduda, kas mingi osa on Stringis

    olemas. Kuidas asendada mingeid märke/tähti Stringis jne. 

    1)  Alustame Stringi lõikamisest. Selleks on java sisemine funktsioon substring(x, y);

    Kus x on esimese tähe numbriline koht ja y viimase tähe numbriline koht, mis

    Stringist välja lõigatakse. y-i mitte kirjutamisel lõigatakse välja string esimesest

    etteantud tähemärgist sõna lõpuni. 

    Näide: 

    2)  Mõnikord me ei tea, mis koha peal mingi täht asub. Selleks on olemas java sisemine

    funktsioon indexOf(täht); 

    Näide: 

    Pöörame ühtlasi tähelepanu k printimislausele: 

    System.out.println("k1 väärtus: "+k1 + "\nk2 väärtus: "+k2);

  • 8/17/2019 Learn java by Alex 2011.pdf

    21/39

    Teksis olev \n annab käsu teha uue rea.

    Sama lugu on ka System.out.println() ja System.out.print() –ga, kus println puhul

    tehakse uus rida ja print puhul mitte.

    Samuti tuletame meelde ja jätame veel paremini meelde, et funktsioone saab

    kasutada teiste funktsioonide sees!

    3)  Kuidas leida kogu sõna pikkus? – sõna.length() funktsiooniga.

    Näide: 

    4)  Kordame üle ka Stringi liitmised. 

    Näide: 

    a= “ae“; liidab stringile a paremalt poolt juurde teksti “ae“.

    5) 

    Asendamine toimub funktsioonigasõna.replace(vana, uus); või sõna.replaceAll(vana, uus);

    Näide: 

  • 8/17/2019 Learn java by Alex 2011.pdf

    22/39

     

    6)  Kontroll, kas mingi osa on olemas stringis. If-lause ja contains(sõna osa) meetodiga. 

    Meetod on sama mis funktsioon.

    Näide: 

    7)  Neid meetodeid on veel ja veel ja veel. Kui eclipse plugin võimaldab seda, siis pärast

    muutujat punkti pannes kuvab see palju erinevaid võimalusi. Kui ei kuva, siis

    googeldada saab ka alati. Programmeerija ei pea kõike peast teadma. Autodki

    pannakse skeemi järgi kokku, mitte peast (need mis käsitsi kokku pannakse).

    Plugina näide: 

  • 8/17/2019 Learn java by Alex 2011.pdf

    23/39

     

    VIII. Errorite püüdmine, nende töötlemine Iga programmeerija puutub kokku veateatega. Juba kasvõi siis saame veateate, kui üritame

    ühte jagada nulliga.

    Neid erroreid saab kinni püüda, et mitte takistada programmi tööd. 

    Selleks on olemas nii nimetatud try-catch block.

    Põhimõtteliselt me algul üritame teha arvutust – try –  ja vea ilmnemisel püüame selle kinni – catch.

    Üldkuju: 

    try{

    //kood, nt tehe vms

    }

    catch(Exception e){

    System.out.println(e.getMessage());

    }

    Kui me kood tekitab vea, liigub seesama viga catch bloki, kus antakse põhimõtteliselt sellele

    nimi, et sellega saaks teha soovitud toiminguid. Antud juhul nimetame Exceptioni ehk erandi

    (=vea) e-ks ja väljastame java meetodiga probleemi. 

  • 8/17/2019 Learn java by Alex 2011.pdf

    24/39

    1/0 näide try catch blokiga: 

    Nagu näeme, väljastati meile koleda ja pika punase teksti asemel teade, et üritatakse jagada

    nulliga.

    Eelneva näite puhul püütakse catch(Exception e) abil kinni kõikvõimalikud vead, mis võiksid

    tekkida. AGA! Mõnikord on vaja kinni püüda just ühte kindlat probleemi, et mitte kasutajat

    eksitada vale informatsiooniga.

    Selleks püüame mitte Exceptionit, vaid üle-eelmise näite puhul näiteks

    ArithmeticExceptionit. Vea ilmnemisel saab hõlpsasti seda nime lihtsalt kopeerida.

    Näide:

     

  • 8/17/2019 Learn java by Alex 2011.pdf

    25/39

    Nüüd saime kätte kindla errori. Esialgu tundub, et vahet nagu ei olekski. AGA on! Me saame

    püüda nõnda erinevaid Exceptioneid ja lõpuks tasub kindlasti mainida, et püütaks kinni ka

    kõik ülejäänud, mille peale ei ole programmeerija võimeline tulema. Samuti võime me

    teated kinni keerata ja teha just seda, mis meeldib. Kasutaja ei peagi aru saama, et viga

     juhtus.Näide:

    Püüame kinni kõik aritmeetilised erandid ja ka ülejäänud, mis tekkida võiksid. 

    LISATARKUS: THREADidMõnikord võib juhtuda, et on vaja panna tööle mingid programmid paralleelselt. Teadagi

    täidab programm koodi üldiselt järjekorras. Selleks on threadi võimalus. 

    Oletame, et me ehitame üles projekti MAJA. See on jagatud klassideks. Klassideks on sein,

    vundament, katus, aken, uks

    Lihtsuse mõttes unustame ära aknad ja uksed. Hakkame siis maja ehitama 1) vundament 2) sein 3) sein 4)sein 5)sein 6)katus

    Selle asemel, et järjest ehitada valmis ühte seina, siis teist, kolmandat, neljandat, võiks

    ehitada nad üles kõik korraga. Selleks tulevadki appi meile Threadid.

    Oletame nüüd selle sama näite põhjal, et thread on töömees. Kõik mis meil on vaja teha, on

    deklareerida mitu threadi ehk tellida mitu töömeest ja panna nad tööle. Seda me teemegi!

    Teeme ühe klassi töömees ja extendime ta Threadiks, see tähendab, et me laiendame ta java

    olemasolevaks klassiks, et saaks kasutada tolle kõiki omadusi. Teeme funktsiooni run, mis on

    Threadi tegude käivitaja ja paneme sinna alla, mida me tahaksime, et töömees teeks. 

    Klass Toomees on selline:

  • 8/17/2019 Learn java by Alex 2011.pdf

    26/39

     

    Teeme ka klassi ehitamine, mis käivitab ehitamise:

     Thread.sleep(500); paneb programmi 0,5 sekundiks seisma.

    Ja programmist deklareerime töömehed ja paneme nad tööle!

     

  • 8/17/2019 Learn java by Alex 2011.pdf

    27/39

    Nagu konsoolil näha, teevad threadid vaheldumisi tööd. Mitte ei tee algul Thread-0 oma töö

    ära, seejärel Thread-1 ja Thread-2. Kõik nad teevad korraga tööd! Kui teed näited järgi, tee

    lisaks ehitamise klassi alla veel üks meetod nimega palgaSaamine() ja lase igal töömehel

    saada iga ehitamise järel palka. 

    Lisaülesanne: Tee väike lihtle taimer kasutades While tsüklit ja Thread.sleep()-i. Prindi iga

    uus sekund konsoolile.

    Vihje: 4 rida koodi, saab kokku pressida ka ühele reale. 

    LISATARKUS: GRAAFILINE LIIDESPõhimõte: Teeme klassi mis extendib JFrame-i, sest Jframe on see, kuhu peale nupukesi,

    erinevaid paneele jms lisatakse. Me võime lisada ka paneelide peale soovitud nuppe, aga

    piisab ka täiesti JFramest. Me peame valima sobiva layout-i. Neid on olemas mitmeid, kuid siin juhendis pakun välja

    proovimiseks kahte erinevat: null-layout ja BorderLayout.

    Lisaks võite ise uurida FlowLayouti, GridLayouti, BoxLayouti, GridbagLayouti jne.

    Vahe:

    a)  Null-layouti puhul saame lisada ükskõik mida ükskõik kuhu ükskõik kui suurelt. 

    Siiski loetakse null layouti kasutamist halvaks ideeks (akna suuruse muutmisel

    lisatud komponendid ei muuda suurust koos aknaga , tuleb midagi välja mõelda),

    ent see sobib esmakordseks graafilise liidese tegemiseks kõige paremini. 

    b) 

    BorderLayouti puhul saame valida NORTH, CENTER, SOUTH, EAST, WESTsuundade vahel ja komponendid lisatakse sinna suunda, mida me valime. On

    erinevaid reegleid, mille abil on võimalik lisatud komponentide soovitud asukohti

    seadistada. Komponendid suurenevad ka akna suuruse muutmisel automaatselt. 

    1)  Teeme uue klassi ja extendime selle Jframeks VÕI teeme eraldi meetodi ja lisame

    JFrame-i instantsina (koopiana). (importida javax.swing.JFrame) 

    2)  Lisame erinevad komponendid, seal hulgas layouti. 

    3)  Konfigureerime komponendid 

    4) 

    Teeme akna nähtavaks. 5)  Kutsume meetodi või klassi välja Mainis. 

  • 8/17/2019 Learn java by Alex 2011.pdf

    28/39

     

    I.  NULL-LAYOUT

    Näide null-layoutist: Teeme uue klassi, nimeks paneme näiteks „window“.

    NING KINDLASTI, KUI ARVUTI SEDA ISE EI TEINUD VÕI NEID VÕIMALUSI EI PAKKUNUD,

    TULEB TEHA KA VASTAVAD IMPORDID:

    KUTSUME MEETODI VÄLJA MAINIS! 

  • 8/17/2019 Learn java by Alex 2011.pdf

    29/39

     

    TULEMUS ON SELLINE:

    TEADMISEKS! Koordinaadid algavad ülevalt vasakust

    nurgast.

  • 8/17/2019 Learn java by Alex 2011.pdf

    30/39

    Piltlikult öeldes:

     

    Nüüd teeme sama asja konstruktorina. Konstruktor tähendab, et terve klass ongi nagu

    meetod ehk funktsioon. Klassist instantsi tegemisel

    käivitub see automaatselt ja ei ole vaja välja kutsuda

    selle klassi all olevat meetodit. Vaadake näidet ja

    samuti pöörake tähelepanu sellele, kuidas on

  • 8/17/2019 Learn java by Alex 2011.pdf

    31/39

    konstruktor tehtud, sest konstruktorit saab kasutada

    ükskõik kus, mitte ei ole see mõeldud vaid graafilise

    liidese tegemiseks!Näide: 

    Tulemus on täpselt sama, mis eespool pildina välja

    toodud.

    Nii tehakse konstruktor!

  • 8/17/2019 Learn java by Alex 2011.pdf

    32/39

     

    II.  BorderLayout

    BorderLayoutiga on võimalik asju paigutada nõnda: 

    Teeme näite konstruktoriga (importida java.awt.BorderLayout):

  • 8/17/2019 Learn java by Alex 2011.pdf

    33/39

     

    Ning tulemus on selline:

  • 8/17/2019 Learn java by Alex 2011.pdf

    34/39

    setSize() ja setLocation() meetodid komponentide peal

    Borderlayoutiga ei tööta! 

    Ometigi me ei taha võib-olla nii laie või kõrgeid nuppe. Siin aitavad

    hädast välja paneelid, mida sai ka null-layouti näites juba

    demonstreeritud.

    IDEE seisneb selles, et me lisame paneeli näiteks põhja ja paneelile

    omakorda nupud.

    Näide: 

  • 8/17/2019 Learn java by Alex 2011.pdf

    35/39

    Ja tulemus on selline:

    Akna venitamisel venitatakse ka nuppe.

    ACTIONLISTENERID:

    Neid nii öelda kuulajaid on vaja selleks, et nupule vajutades midagi ka

     juhtuks. Nende kasutamisvõimalusi täpsemalt leiab googeldades,

    kuid näitan ära nupu kuulamist ja ka teksti sisestamist konsoolile

    textfieldi ja nupu abil.

  • 8/17/2019 Learn java by Alex 2011.pdf

    36/39

    Nupu actionlistener:

    mpordid:

  • 8/17/2019 Learn java by Alex 2011.pdf

    37/39

    a vajutades nupule on tulemuseks väljatrükk konsoolil: 

    Kirjutame veelkord üles nupu actionlisteneri: 

    JButton jb = new JButton("kliki siia!"); //teeme uue nupu jb 

    jb.addActionListener(new ActionListener() { //lisame actionlisteneri  public void  actionPerformed(ActionEvent e) {//kui me vajutame nupule...

    //lisame siia koodi, mis juhtub, kui nupule vajutada

    }

    });

    S! Jälgige kõiki sulge, loogilisi sulge, semikoolonit.

  • 8/17/2019 Learn java by Alex 2011.pdf

    38/39

    Textfield + nupp:

    mport: 

    TULEMUS (textfieldi kirjutades ja nupule vajutades):

  • 8/17/2019 Learn java by Alex 2011.pdf

    39/39

    TEADMISEKS!

    Kui setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE) jääbkirjutamata, aken X-i vajutades ei sulgu, vaid läheb peitu. Programm

     jääb samuti tööle. Terminatides programmi sulgub lõplikult ka aken. 

    Kui setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE) on

    kirjutatud, siis X-i vajutades teminatetakse terve programm.

    Loodan, et sellest manuaalist oli kasu. Kui ei, siis lootusetu juhtum......

    see veel siiski ei ole. Tuleb veel veidi rohkem süveneda ja mitte

    omandada kogu materjal korraga, vaid peatükkide kaupa.


Recommended