1. throw
operatör
När ett undantag fångas av ett catch
block, och tills det kastas till Java-maskinen, är det bara ett objekt som ärver ( Exception
eller snarare, Throwable
). Själva undantagsobjektet har inga magiska egenskaper.
All logik i hur undantag fungerar är bara ett speciellt sätt som Java-maskinen beter sig när ett undantag kastas till den.
Du kan alltid kasta om ett fångat undantag till Java-maskinen. För att göra detta måste du använda throw
operatorn:
throw exception;
Exempel:
Koda | Konsolutgång |
---|---|
|
|
I den här koden fångade vi ett undantag, visade ett meddelande om det på skärmen och kastade det sedan om.
Ett omkastat undantag kan inte fångas upp av andra catch
block i samma try
block.
2. Dina undantag
Förresten, du kan skapa ett undantagsobjekt själv: det är bara ett objekt vars typ är Exception
eller en klass som ärver det. Och kasta den.
Det är lättare än det låter. Exempel:
Koda | Konsolutgång |
---|---|
|
|
I exemplet ovan skapade vi ett nytt undantagsobjekt vars typ är RuntimeException
och kastade det omedelbart med throw
operatorn.
Det kommer omedelbart att fångas av catch
blocket, eftersom RuntimeException ärver Exception
. Koden catch (Exception except)
fångar undantagsobjekt av alla klasser som ärver Exception
klassen.
3. finally
nyckelord
En annan viktig punkt. Ibland måste en programmerare utföra någon åtgärd oavsett om ett undantag inträffade i koden. Anta till exempel att vi öppnade en fil för att skriva. Den öppnade filen måste stängas genom att anropa close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
finally
För att utföra dessa obligatoriska åtgärder lades en annan typ av block ( ) till try-catch
konstruktionen, vilket skapade try-catch-finally
konstruktionen. Det ser ut så här:
Exempel:
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
blocket kommer att köras i alla fall, oavsett om det fanns ett undantag. Även om ett undantag kastas och inte fångas, finally
kommer blockeringen fortfarande att utföras.
Förresten, om du inte vill fånga ett undantag, men du behöver ett finally
block, använd förkortningen för try-catch-finally
konstruktionen: ett try-finally
block. Det ser ut ungefär så här:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION