1. throw
operátor
Amikor egy kivételt elkap egy catch
blokk, é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 throw
operá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.
catch
Az ú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 Exception
vagy 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 throw
operá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 Exception
osztályt.
3. finally
kulcsszó
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-finally
konstrukció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 finally
blokkban 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 finally
blokk akkor is végrehajtódik.
Egyébként, ha nem akarsz kivételt elkapni, de szükséged van egy finally
blokkra, használd a konstrukció rövidítését try-catch-finally
: try-finally
blokk. 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