"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:

Java 5
try
{
  …
}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Java 7
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:"

Példa végül
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
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
RuntimeException
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
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 ."

Példa
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."