1. throw
operatør
Når en undtagelse fanges af en catch
blok, og indtil den bliver smidt til Java-maskinen, er det blot et objekt, der arver Exception
(eller rettere, Throwable
). Selve undtagelsesobjektet har ingen magiske egenskaber.
Al logikken i, hvordan undtagelser fungerer, er bare en speciel måde, Java-maskinen opfører sig på, når der kastes en undtagelse til den.
Du kan altid gengive en fanget undtagelse til Java-maskinen. For at gøre dette skal du bruge operatoren throw
:
throw exception;
Eksempel:
Kode | Konsoludgang |
---|---|
|
|
I denne kode fangede vi en undtagelse, viste en besked om den på skærmen og smed den derefter igen.
En omkastet undtagelse kan ikke fanges af andre catch
blokke i samme try
blok.
2. Dine undtagelser
I øvrigt kan du selv oprette et undtagelsesobjekt: det er bare et objekt, hvis type er Exception
eller en klasse, der arver det. Og smid den.
Det er nemmere end det lyder. Eksempel:
Kode | Konsoludgang |
---|---|
|
|
I eksemplet ovenfor oprettede vi et nyt undtagelsesobjekt, hvis type er, RuntimeException
og kastede det straks ved hjælp af throw
operatoren.
Det vil straks blive fanget af catch
blokken, da RuntimeException arver Exception
. Koden catch (Exception except)
fanger undtagelsesobjekter af alle klasser, der arver Exception
klassen.
3. finally
søgeord
Endnu en vigtig pointe. Nogle gange er en programmør nødt til at udføre en handling, uanset om der opstod en undtagelse i koden. Antag for eksempel, at vi åbnede en fil til skrivning. Den åbnede fil skal lukkes ved at ringe til close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
For at udføre disse obligatoriske handlinger blev en anden slags blok ( finally
) tilføjet til try-catch
konstruktionen, hvorved try-catch-finally
konstruktionen blev skabt. Det ser sådan ud:
Eksempel:
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();
}
Koden i finally
blokken vil køre under alle omstændigheder, uanset om der var en undtagelse. Selvom en undtagelse bliver kastet og ikke fanget, finally
vil blokeringen stadig udføres.
Forresten, hvis du ikke vil fange en undtagelse, men du har brug for en finally
blok, skal du bruge den stenografiske notation for try-catch-finally
konstruktionen: en try-finally
blok. Det ser sådan ud:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION