Vezbe 09 - Izuzeci, Fajlovi, Niti
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$