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 |
|---|---|
|
|
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 |
|---|---|
|
|
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
}
GO TO FULL VERSION