1. throwexploitant

Wanneer een uitzondering wordt opgevangen door een catchblok 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. throwOm dit te doen, moet u de operator gebruiken :

throw exception;

Voorbeeld:

Code Console-uitvoer
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

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 catchblokken in hetzelfde tryblok.


2. Uw uitzonderingen

Je kunt trouwens zelf een uitzonderingsobject maken: het is gewoon een object waarvan het type is Exceptionof een klasse die het overerft. En gooi het.

Het is makkelijker dan het klinkt. Voorbeeld:

Code Console-uitvoer
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

In het bovenstaande voorbeeld hebben we een nieuw uitzonderingsobject gemaakt waarvan het type is RuntimeExceptionen hebben het onmiddellijk gegooid met behulp van de throwoperator.

Het wordt onmiddellijk door het catchblok opgevangen, aangezien RuntimeException overerft Exception. De catch (Exception except)code vangt uitzonderingsobjecten op van alle klassen die de Exceptionklasse erven.



3. finallytrefwoord

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 finallytoegevoegd , waardoor de constructie ontstond. Het ziet er zo uit:try-catchtry-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 finallyblok wordt in ieder geval uitgevoerd, ongeacht of er een uitzondering was. Zelfs als een uitzondering wordt gegenereerd en niet wordt opgevangen, finallywordt het blok nog steeds uitgevoerd.

Trouwens, als je geen uitzondering wilt vangen, maar wel een finallyblok nodig hebt, gebruik dan de verkorte notatie voor de try-catch-finallyconstructie: een try-finallyblok. Het ziet er ongeveer zo uit:

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}