Gecontroleerde uitzondering vs. Runtime-uitzondering
Uitzonderingen zijn speciale soorten gebeurtenissen die de normale programmastroom kunnen 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. 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). 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, wordt het uitzonderingsobject doorgegeven 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 de klasse Throwable. Gecontroleerde uitzonderingen zijn uitzonderingen waarop de verwerking door de compiler wordt afgedwongen. Runtime-uitzonderingen zijn een soort uitzonderingen die niet worden gecontroleerd door de compiler.
Wat is een gecontroleerde uitzondering?
Gecontroleerde uitzonderingen zijn ofwel objecten van de klasse java.lang.exception of de subklassen (met uitzondering van java.lang.RuntimeException en de bijbehorende subklassen). Gecontroleerde uitzonderingen worden "gecontroleerd" tijdens het compileren. Dat betekent dat de programmeur deze uitzonderingen moet vangen of weggooien, anders zou het compileren klagen (waardoor een compilerfout ontstaat). Om deze reden zijn veel gecontroleerde uitzonderingen zeer bekend bij programmeurs. De IOException en de bijbehorende subklassen zijn bijvoorbeeld gecontroleerde uitzonderingen en telkens wanneer de programmeur te maken krijgt met het openen of wijzigen van een bestand, controleert de compiler of alle programmeurs de mogelijke IOExceptions hebben afgehandeld..
Wat is een Runtime-uitzondering?
Runtime-uitzonderingen bestaan uit java.lang.RuntimeException en alle bijbehorende subklassen. Theoretisch gezien hebben ze hetzelfde doel als gecontroleerde uitzonderingen en kunnen ze worden gegooid of behandeld zoals gecontroleerde uitzonderingen, maar de verwerking ervan wordt niet door de compiler afgedwongen. Daarom behoren Runtime-uitzonderingen tot de familie van niet-gecontroleerde uitzonderingen. NullPointerException, NumberFormatEception, ClassCastException en ArrayIndexOutOfBoundsException zijn veelvoorkomende runtime-uitzonderingen in Java.
Wat is het verschil tussen gecontroleerde uitzondering en Runtime-uitzondering?
Hoewel zowel gecontroleerde uitzonderingen als runtime-uitzonderingen ongewenst optreden tijdens de uitvoering van een programma, hebben ze hun verschillen. Gecontroleerde afhandeling van uitzonderingen wordt afgedwongen door de compiler, maar runtime-uitzonderingen zijn dat niet. Daarom moeten gecontroleerde uitzonderingen worden gegooid of verwerkt om de code te kunnen compileren, maar er is geen dergelijke vereiste met betrekking tot runtime-uitzonderingen. Daarom behoren runtime-uitzonderingen samen met fouten tot de categorie voor niet-gecontroleerde uitzonderingen.
Nadeel met gecontroleerde uitzonderingen is dat de programmeur het moet verwerken, ook al weet ze niet hoe. Dus als de programmeur gewoon een nieuwe uitzondering gooit zonder het origineel in te pakken, gaat het stacktracé dat bij de oorspronkelijke uitzondering hoort, verloren. Dit is waar runtime-uitzonderingen van pas komen. Omdat alle runtime-uitzonderingen op één plaats kunnen worden afgehandeld, kunnen programmeurs minder code schrijven. Aan de andere kant, omdat gecontroleerde uitzonderingen moeten worden gepakt, is er geen verrassing voor de programmeur. Ze zal altijd weten welke gecontroleerde uitzondering op een bepaalde manier kan worden gegooid. In tegenstelling hiermee kunnen verschillende runtime-uitzonderingen worden gegenereerd zonder medeweten van de programmeur.