"Ah. Itt vagy. Már kerestelek."
"Történt valami?"
– Nem, de még tanulunk.
"Rendben. Figyelek."
"Szeretnék még néhány dolgot elmondani a kivételekről:"
"A Java 7-ben a try-catch konstrukció kissé kibővült több fogási blokk hozzáadásával . Nézze meg ezt a példát:
try
{
…
}
catch (IOException ex)
{
logger.log(ex);
throw ex;
}
catch (SQLException ex)
{
logger.log(ex);
throw ex;
}
try
{
…
}
catch (IOException | SQLException ex)
{
logger.log(ex);
throw ex;
}
"Szóval most írhatunk több kivételt VAGY operátorokkal elválasztva ("|' bináris VAGY)?"
– Így van. Hát nem kényelmes?
"Hmm. De mi lesz a kivétel objektum típusa a catch blokkon belül?"
"Végül is az IOExceptionnek megvannak a maga módszerei, az SQLExceptionnek pedig a metódusai."
"A kivétel típusa a közös ősosztályé lesz."
"Ah. Más szóval, ez nagy valószínűséggel Exeption vagy RuntimeException lesz . Akkor miért nem írod egyszerűen a catch(e kivétel)?"
"Néha, amikor a hibákat egyénileg kezeli, célszerű csoportosítani őket, egyes hibákat naplóba írni, másokat visszadobni, másokat pedig más módon kezelni."
"Más szóval, ez a séma megoldja a duplikált fogási blokkok problémáját a különböző hibák kezelésére."
"Ah. értem. Köszönöm, Ellie."
"Ez még nem minden. Szeretnék egy kicsit többet mesélni a végső blokkról."
"Amint azt valószínűleg már tudja, ez a blokk mindig végrehajtásra kerül."
"És amikor azt mondom, hogy mindig, akkor azt értem, hogy abszolút mindig ."
"Például:"
try
{
return 1;
}
finally
{
return 0;
}
"Itt van egy visszatérés a try blokkban, és egy visszatérés a végleges blokkban. Tehát ennek a metódusnak a visszatérési értéke a 0 lesz."
"A végső blokk lefut, bármi történjék is. És a return utasítása felülírja a másik visszatérési értéket a saját értékével."
"Látom."
"A metódus azonban vagy értéket ad vissza, vagy kivételt dobhat. "
"Tehát, ha egy try blokkban egy értéket adnak vissza, de a végső blokk kivételt dob , akkor az eredmény kivétel lesz . "
"Mi van akkor, ha kivételt dob a try blokkba, de a Végül blokknak van return utasítása?"
"Akkor olyan, mintha a metódus megfelelően működne, és a return utasításban szereplő érték kerül visszaadásra.
Példa | Eredmény |
---|---|
|
0 |
|
RuntimeException |
|
0 |
|
IOException |
"Az egyetlen ok, amiért a final metódus nem kerül végrehajtásra, az az, hogy a program azonnali leállítása a System.exit(); metódus hívásával történik ."
try
{
System.exit(0);
return 1;
}
finally
{
return 0;
}
"Látom."
"Ne feledje, hogy ezekről a témákról általában megkérdezik az interjúkat, ezért jó lenne megérteni és emlékezni rájuk."
GO TO FULL VERSION