1. throw
exploitant
Wanneer een uitzondering wordt opgevangen door een catch
blok en totdat deze naar de Java-machine wordt gegooid, is het slechts een object dat overerft Exception
(of beter gezegd, Throwable
). Het uitzonderingsobject zelf heeft geen magische eigenschappen.
Alle logica van hoe uitzonderingen werken, is gewoon een speciale manier waarop de Java-machine zich gedraagt wanneer er een uitzondering op wordt gegooid.
U kunt een gevangen exception altijd teruggooien naar de Java-machine. throw
Om dit te doen, moet u de operator gebruiken :
throw exception;
Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
In deze code hebben we een uitzondering opgevangen, er een bericht over weergegeven op het scherm en deze vervolgens opnieuw verwijderd.
Een opnieuw gegenereerde uitzondering kan niet worden opgevangen door andere catch
blokken in hetzelfde try
blok.
2. Uw uitzonderingen
Je kunt trouwens zelf een uitzonderingsobject maken: het is gewoon een object waarvan het type is Exception
of een klasse die het overerft. En gooi het.
Het is makkelijker dan het klinkt. Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
In het bovenstaande voorbeeld hebben we een nieuw uitzonderingsobject gemaakt waarvan het type is RuntimeException
en hebben het onmiddellijk gegooid met behulp van de throw
operator.
Het wordt onmiddellijk door het catch
blok opgevangen, aangezien RuntimeException overerft Exception
. De catch (Exception except)
code vangt uitzonderingsobjecten op van alle klassen die de Exception
klasse erven.
3. finally
trefwoord
Nog een belangrijk punt. Soms moet een programmeur een actie uitvoeren, ongeacht of er een uitzondering in de code is opgetreden. Stel dat we een bestand hebben geopend om te schrijven. Het geopende bestand moet worden gesloten door te bellen naar close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Om deze verplichte acties uit te voeren, werd een ander soort blok ( ) aan de constructie finally
toegevoegd , waardoor de constructie ontstond. Het ziet er zo uit:try-catch
try-catch-finally
Voorbeeld:
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();
}
De code in het finally
blok wordt in ieder geval uitgevoerd, ongeacht of er een uitzondering was. Zelfs als een uitzondering wordt gegenereerd en niet wordt opgevangen, finally
wordt het blok nog steeds uitgevoerd.
Trouwens, als je geen uitzondering wilt vangen, maar wel een finally
blok nodig hebt, gebruik dan de verkorte notatie voor de try-catch-finally
constructie: een try-finally
blok. Het ziet er ongeveer zo uit:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION