Vezbe 09 - Izuzeci, Fajlovi, Niti

download Vezbe 09 - Izuzeci, Fajlovi, Niti

of 8

Transcript of Vezbe 09 - Izuzeci, Fajlovi, Niti

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    1/8

    VEBE 09

    IZUZECI EXCEPTION

    Izuzeci su mehanizmi pomou koga pozvani metod moe da inicira da se desio neki"abnormalni" dogaaj.

    Kada u nekom metodu doe do situacije koju sam metod ne ume da razrei, metod moeda "baci" izuzetak.

    Kada pravimometod koji u nekom trenutku baca izuzetak, to moramo danaglasimo u zaglavlju metoda ina!e se program nee kompajlirati.

    publicRacionalanBroj (intb, inti) throwsException{}

    Kada negde u programu pozivamometod koji baca izuzetak, moemo ga pozvati

    isklju!ivo u try#catchbloku ina!e se program nee kompajlirati.

    $ %avi se izuzetak tretira kao obj!atklase koja nasleuje klasu Thro"ab#. &va klasanalazi se u paketujava$#a%&.

    Kada objekat tipa izuzetak poaljemo kao argument metodu '(stem.out.println, bieodtampano sledee)im'tipa'iz(zt!a) por(!a'iz(zt!a

    %edan tryblok moe da ima vie catchblokova

    *

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    2/8

    Z*+*T*, -)+einisati klasu -azlomak sa)

    /rivate poljima im%i#ac. broji#ac) int /ublic parametarizovanim konstruktorom koji baca 0e1ception2 u slu!aju kreiraja

    razlomka !iji je imenilac 3.

    $ glavnom delu programa uraditi) +eklarisati dve promenljive po tipu klase -azlomak $ prvu promenljivu instancirati objekat klase -azlomak +I'K$4&564I $ obe promenljive instancirati objekte klsa -azlomak unutar tr( 7 catch bloka

    -898:%8) K&+publicclassRazlomak {

    privateintimenilac, brojilac;

    publicRazlomak (intb, inti) throwsException

    {

    if(i == 0)thrownewException("Razlomak nije kreiran !!!");

    else

    {

    imenilac= i;

    brojilac= b;

    }

    }

    }

    classlana {

    publicstaticvoidmain(trin# ar#$%&)

    {

    Razlomak razlomak', razlomak;

    razlomak' = ne* Razlomak(',); ERR+R

    oo nece op-$titi an tr. bloka

    jaice a nije pokrien mo#-ci iz-zetak (-n/anle exception)

    (-kloniti i$pre narebe i proeriti)

    try

    {

    razlomak' = newRazlomak(',); +

    razlomak = newRazlomak(1,0); ERR+R

    }

    catch(Exception e)

    {

    .$tem2out2println(e);

    }

    }

    }

    343 5 +67+83

    jaa2lan#2Exception9 Razlomak nije kreiran !!!

    58;

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    3/8

    /*1OVI

    Z*+*T*, 2) $ ajl brojevi.t1t upisati nasumi!no nekoliko brojeva u nekoliko redova. :apisatiprogram koji e pro!itati sve brojeve iz navedenog ajla i u ajl izlaz.t1t ispisati srednji vrednostu!itanih brojeva.N*PO3EN*) &tvaranje ajla kao i pretvaranje u!itanih stringova u brojeve mora bitizaokrueno sa tr(#catch blokom.

    ??brojevi.t1t2 :2 ''2

    :

    publicclass?e$t@ajloi

    {

    publicstaticvoidmain(trin#%& ar#$)

    {

    eAini$anje $kenera

    canner $c=null;

    try

    {

    $c=newcanner(new@ile("brojei2txt"));

    }

    catch(@ile6ot@o-nException e)

    {

    e2printtack?race();

    .$tem2exit(');

    }

    trin# line="";

    itanje reno$ti

    double$-ma = 0;

    intbr = 0;

    while($c2/a$6ext()){

    line = $c2next();

    try{$-ma C= Do-ble2parseDouble(line);

    brCC;

    } catch(Exception e) {

    TODO9 /anle exception

    }

    }

    $c2clo$e(); zataranje Aajla

    @

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    4/8

    4i$anje - Aajl

    4rintFriter izl;

    try

    {

    izl = new4rintFriter(new@ileFriter("izlaz2txt"));

    }

    catch(3+Exception 3+e)

    {.$tem2out2println("6e-$pelo otaranje izlaz2txt");

    return;

    }

    3$pi$-jemo pro$ek

    if(br G 0){

    izl2println("renja reno$t = "C $-mabr);

    .$tem2out2println("$e ok");

    izl2Al-$/(); praznjenje baAera

    }

    else

    {

    izl2println("6ema -ne$eni/ reno$ti");izl2Al-$/(); praznjenje baAera

    }

    izl2clo$e(); zataranje Aajla

    }

    }

    izlaz2txt

    renja reno$t = 121H'1H'1:

    A

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    5/8

    P*4*1E1N* OB4*+* 5 NITI

    :it je jedna p(ta%ja izvr6%ja pro&rama.

    /okretanje vie niti m(#tithra7i%& zna!i da se vie razli!itih linija koda izvrava uistom trenutku.

    Kreiranje niti u %avi, ukupno 7vana!ina) nasleivanjem klase Thra7 implementiranjem interejsa 4(%%ab#

    N*81EIV*NE3 ,1*8*nasleuje atribute i metode od superklase, ali zato postojiograni!enje na nasleivanje samo jedne klase.

    publicclassBrojac extends?/rea {

    publicvoidr-n(){

    implementiranje A-nkcionalno$ti

    }

    }

    =etod r(%:;je metod u koji se smeta posao koji nit treba da obavi. 4aj metod je nasleen izklase 4hread i mi treba da ga redeiniemo

    I3P1E3ENTI4*NE INTE4/E8*prevazilazi ovo ograni!enje, a to je i ujednonajrasprostranjeniji na!in za kreiranje niti.

    publicinterfaceRunnable

    {

    publicabstractvoidr-n();

    }

    publicclassBrojac implementsR-nnable

    {

    ?/rea t;

    publicBrojac()

    {

    t= new?/rea(this);

    }

    publicvoidr-n()

    {

    2222

    }

    }

    $ ovoj varijanti postoji promenljiva t tipa Thra7, kojoj se dodaje novi objekat Thra7, akonstruktoru se prosleuje reerenca na samu klasu Broja

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    6/8

    /-I=8- *)+einisati klasu 4rkac koja nasleuje 4hread klasu i u okviru metode r(%:; *3 puta uspavljivatinit neko random vreme. $ glavnom programu startovati dve niti i videti koja e se pre zaviti.

    publicclass?rkac extends?/rea {

    public?rkac(trin# $tr) ar#-ment je ime niti

    {super($tr); pro$lej-je $e natkla$i

    }

    publicvoidr-n()

    {

    for(inti=0; iI'0; iCC){

    .$tem2out2println(iC" "C#et6ame()); o$tampa ime

    try

    {

    sleep((long)(Jat/2random()'000)); -$palj-je nit

    }

    catch(Exception e)

    {

    .$tem2out2println("3z-zetak9 "C#et6ame());

    }

    }

    prijaa a je pro$ao kroz cilj

    .$tem2out2println(#et6ame()C" pro$ao kroz cilj !!!");

    }

    }

    publicclasslana {

    publicstaticvoidmain (trin#%& ar#$) {

    new?rkac("BJF")2$tart(); $tart-je $e nit

    new?rkac("K5D3")2$tart(); $tart-je $e nit

    }

    }

    0 BJF

    0 K5D3' BJF

    BJF

    ' K5D3

    : BJF

    K5D3

    : K5D3

    1 K5D3

    1 BJF

    BJF

    K5D3

    < BJF

    < K5D3

    H BJFH K5D3

    BJF

    L BJF

    K5D3

    BJF pro$ao kroz cilj !!!

    L K5D3

    K5D3 pro$ao kroz cilj !!!

    D

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    7/8

    /-I=8- >)+einisati klasu :it koja implementira interejs 4(%%ab# i u okviru metode r(%:; *3 putauspavljivati nit neko random vreme. $ glavnom programu kreirati i startovati dve niti i videtikoja e se pre zaviti.

    class6it implementsR-nnable{

    private?/rea t;

    privateint$leep?ime;

    public6it(trin# name, inttime)

    {

    $leep?ime= time;

    t= new?/rea(this, name);

    }

    publicvoid$tart()

    {

    t2$tart();

    }

    publicvoidr-n(){

    for(inti='; iI'0; iCC)

    {

    try

    {

    ?/rea2sleep($leep?ime);

    }

    catch(3nterr-pteException e){}

    .$tem2out2println(iC"2 proce$ "Ct2#et6ame()C" je $paao "C $leep?imeC"m$");

    }

    .$tem2out2println("7ar$ena nit "Ct2#et6ame());

    }

    }

    classlana

    {

    publicstaticvoidmain(trin# ar#$%&)

    {

    6it n' = new6it("?/rea '",00);

    6it n = new6it("?/rea ",0);

    n'2$tart();

    n2$tart();

    }

    }

    E

  • 7/25/2019 Vezbe 09 - Izuzeci, Fajlovi, Niti

    8/8

    343 5 +67+83

    '2 proce$ ?/rea je $paao 0m$

    2 proce$ ?/rea je $paao 0m$

    '2 proce$ ?/rea ' je $paao 00m$

    :2 proce$ ?/rea je $paao 0m$

    12 proce$ ?/rea je $paao 0m$

    2 proce$ ?/rea ' je $paao 00m$

    2 proce$ ?/rea je $paao 0m$

    :2 proce$ ?/rea ' je $paao 00m$