cvicenia 7. tyzden

Moderátor: FeroG

<<

Danka.Sl.

Príspevky: 41

Registrovaný: Štv Sep 27, 2012 10:53 pm

Poslať Ned Nov 25, 2012 10:05 pm

cvicenia 7. tyzden

Mam otazku je nejaky speialny dovod preco su v nasledujucom kode uvedenom pri cviceniach zo siedmeho tyzdna try bloky vo finally?? aka vynimka tam moze vyskocit?? :)

finally {
if (citac != null) {
try {
citac.close();
} catch (Exception e) {
e.printStackTrace();
}
}

if (zapisovac != null) {
try {
zapisovac.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
<<

FeroG

Príspevky: 1290

Registrovaný: Uto Máj 29, 2007 11:25 am

Poslať Ned Nov 25, 2012 10:17 pm

Re: cvicenia 7. tyzden

Metoda close moze hodit vynimku IOException (je to nekontrolovana, t.j. behova vynimka, ktora sa nemusi odchytavat). Pre viac informacii mozes pozriet v Java API dokumentacii metody close triedy Writer. Analogicka situacia je so Scannerom.

Dovod, preco teraz vynimky chytame je ten, ze zakladom "dobrej" schemy je vzdy zatvorit Scanner, resp. PrintWriter. Nas kod vsak teraz nezatvara jednu vec vo finally bloku, ale 2 veci. Problem vznikne, ak by pri zatvarani citaca (citac.close()), resp. vo vseobecnosti tej prvej veci, vznikla vynimka. To samo o sebe nie je problem, ale dosledok je ten, ze by sa nevykonalo zatvorenie zapisovaca (resp. druhej veci), pretoze vznik vynimky okamzite ukoncuje aktualny blok (aj finally blok). Este krajsie riesenie by bolo vynimku nie len vypisat, ale odchytit, prebalit a poslat dalej. To sa ale naucite az v ramci poslednej prednasky.
<<

kubo

Príspevky: 59

Registrovaný: Sob Okt 20, 2012 5:42 pm

Poslať Pon Nov 26, 2012 9:56 am

Re: cvicenia 7. tyzden

Takyto catch blok, kde nie je vinimka nejak uzsie specifikovana, zachyti kazdu vynimku vzniknutu v try ?
<<

FeroG

Príspevky: 1290

Registrovaný: Uto Máj 29, 2007 11:25 am

Poslať Pon Nov 26, 2012 10:02 am

Re: cvicenia 7. tyzden

kubo píše:Takyto catch blok, kde nie je vynimka nejak uzsie specifikovana, zachyti kazdu vynimku vzniknutu v try ?

Vynimky su objekty. Kazdy objekt je realizaciou nejakej triedy. Vynimky v tomto nie su vynimkou. Kedze uz poznate dedicnost, viete, ze nove triedy vznikaju rozsirovanim inych. V Jave kazda vynimka pochadza z triedy, ktora je rozsirenim triedy Exception. V skutocnosti, vyraz catch (XYZException e) odchytava vsetky vynimky triedy XYZException a tried od nej oddedenych. Ak teda v catch bloku dame odchytavat Exception, odchytime vsetky vynimky (lebo kazda vynimka pochadza z triedy, ktora je rozsirenim Exception).
<<

kubo

Príspevky: 59

Registrovaný: Sob Okt 20, 2012 5:42 pm

Poslať Pon Nov 26, 2012 10:51 am

Re: cvicenia 7. tyzden

dakujem velmi pekne :-)

Späť na PAZ1a

Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software.
Slovenský preklad.