Uitzondering vs Fout
Onverwacht gedrag is onvermijdelijk wanneer een programma wordt uitgevoerd. Dit kan te wijten zijn aan uitzonderingen of fouten. Uitzonderingen zijn gebeurtenissen die de normale programmastroom kunnen verstoren. Fouten zijn voorwaarden die als oninbaar kunnen worden beschouwd. Uitzonderingen zijn meestal gerelateerd aan de applicatie zelf, terwijl fouten gerelateerd zijn aan het systeem waarop het programma draait.
Wat is een uitzondering??
Uitzondering is een gebeurtenis die de normale programmastroom kan verstoren. De naamuitzondering komt van "uitzonderlijke gebeurtenis". Het weggooien van een uitzondering is het maken van een uitzonderingsobject en dit af te geven aan het runtime-systeem. Uitzonderingsobject wordt gemaakt door de methode waarop de uitzondering is opgetreden. Uitzonderingsobject bevat nuttige informatie, zoals het type en de beschrijving van de uitzondering. Wanneer het runtime-systeem het uitzonderingsobject ontvangt, zal het proberen iemand te vinden om het in de oproepstapel af te handelen door het in de omgekeerde volgorde te doorlopen (waarin de methoden zijn aangeroepen). Oproepstapel is de geordende lijst met methoden, die zijn aangeroepen voorafgaand aan de methode waarin de uitzondering plaatsvond. Het runtime-systeem is succesvol als het een methode met een uitzonderingshandler vindt. Uitzonderingshandler is een codeblok dat officieel de genoemde uitzondering kan verwerken. Als het runtime-systeem een geschikte handler vindt (d.w.z. het type uitzondering komt overeen met het type dat kan worden afgehandeld), zal het het uitzonderingsobject doorgeven aan de handler. Dit wordt de uitzondering vangen genoemd. Als de uitzondering echter niet kan worden afgehandeld, wordt het programma beëindigd. In Java nemen uitzonderingen over van 'Throwable-klasse'. NullPointerException en ArrayIndexOutOfBoundsException zijn twee veel voorkomende uitzonderingen in Java.
Wat is een fout?
Een fout is een aandoening die als oninbaar kan worden beschouwd, zoals het programma waarvoor een hoeveelheid geheugen nodig is die groter is dan wat beschikbaar is. Deze fouten kunnen niet tijdens runtime worden afgehandeld. Als er een fout optreedt, wordt het programma beëindigd. In Java nemen fouten over van de klasse Throwable. Fouten staan meestal voor ernstige problemen die de programmeur (of de applicatie) niet zou moeten proberen te vangen. Fouten zijn eenvoudigweg abnormale omstandigheden, die naar verwachting nooit onder normale omstandigheden zullen optreden en daarom nooit zijn voorzien. OutOfMemoryError, StackOverflowError en ThreadDead zijn bijvoorbeeld dergelijke fouten. Methoden mogen nooit omgaan met fouten.
Wat is het verschil tussen Uitzondering en Fout?
Zowel fouten als uitzonderingen zijn ongewenst optreden tijdens de uitvoering van een programma. Ze hebben echter belangrijke verschillen. Uitzonderingen kunnen worden voorzien door de programmeur, terwijl een fout moeilijk te voorzien is. Uitzonderingen kunnen worden gecontroleerd of uitgeschakeld. Maar fouten zijn altijd uitgeschakeld. Uitzonderingen duiden meestal op een fout veroorzaakt door de programmeur. Er treden echter fouten op als gevolg van een systeemfout of een ongepast gebruik van een bron. Daarom moeten uitzonderingen op applicatieniveau worden behandeld, terwijl fouten op systeemniveau moeten worden behandeld (alleen indien mogelijk). Na het afhandelen van een uitzondering keert u gegarandeerd terug naar de normale programmastroom. Maar zelfs als er een fout wordt opgevangen, weet de programmeur misschien niet hoe hij dit moet aanpakken. In tegenstelling tot traditionele foutafhandeling, maken uitzonderingen het mogelijk om de foutafhandelingscode van de reguliere code te scheiden.