1. throwoperátor

Amikor egy kivételt elkap egy catchblokk, és amíg a Java gépre nem dobja, az csak egy objektum, amely örökli Exception(vagy inkább Throwable). Maga a kivételobjektum nem rendelkezik mágikus tulajdonságokkal.

A kivételek működésének minden logikája csak egy speciális módja a Java gépnek, amikor kivételt dobnak rá.

Egy elkapott kivételt bármikor visszadobhat a Java gépre. Ehhez az throwoperátort kell használnia:

throw exception;

Példa:

Kód Konzol kimenet
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Ebben a kódban elkaptunk egy kivételt, megjelenítettünk egy üzenetet a képernyőn, majd visszadobtuk.

catchAz újradobott kivételt ugyanabban a blokkban nem tudják elkapni más blokkok try.


2. Az Ön kivételei

Egyébként saját magad is létrehozhatsz kivételobjektumot: ez csak egy objektum, amelynek típusa Exceptionvagy egy osztály, amely örökli. És dobd el.

Könnyebb, mint amilyennek hangzik. Példa:

Kód Konzol kimenet
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

A fenti példában létrehoztunk egy új kivételobjektumot, amelynek típusa a következő RuntimeException, és azonnal kidobtuk az throwoperátor segítségével.

A blokk azonnal elkapja catch, mivel a RuntimeException örökli Exception. A catch (Exception except)kód elkapja az összes osztály kivételobjektumát, amely örökli az Exceptionosztályt.



3. finallykulcsszó

Egy másik fontos szempont. Néha a programozónak végre kell hajtania valamilyen műveletet, függetlenül attól, hogy történt-e kivétel a kódban. Tegyük fel például, hogy megnyitottunk egy fájlt írásra. A megnyitott fájlt a hívással kell bezárni close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

Ezen kötelező műveletek végrehajtásához egy másik típusú blokkot ( finally) adtak a konstrukcióhoz try-catch, ezzel létrehozva a try-catch-finallykonstrukciót. Ez így néz ki:

Példa:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

A finallyblokkban lévő kód minden esetben lefut, függetlenül attól, hogy volt-e kivétel. Még ha kivételt dobnak is, és nem kapják el, a finallyblokk akkor is végrehajtódik.

Egyébként, ha nem akarsz kivételt elkapni, de szükséged van egy finallyblokkra, használd a konstrukció rövidítését try-catch-finally: try-finallyblokk. Valahogy így néz ki:

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}