Uitzondering versus runtime-uitzondering gecontroleerd
Uitzonderingen zijn speciale soorten gebeurtenissen, die het normale programmaverloop kunnen verstoren. De naamuitzondering komt van "uitzonderlijke gebeurtenis". Het genereren van een uitzondering is het proces waarbij een uitzonderingsobject wordt gemaakt en aan het runtime-systeem wordt overgedragen. Wanneer het runtime-systeem het exception-object ontvangt, zal het proberen iemand te vinden om het af te handelen binnen de call-stack door het in omgekeerde volgorde te doorlopen (waarin de methoden werden aangeroepen). Het runtime-systeem is succesvol als het een methode vindt met een exception-handler. Uitzonderingshandler is een codeblok dat de genoemde uitzondering officieel kan afhandelen. Als het runtime-systeem een geschikte handler vindt, geeft het het exception-object door aan de handler. Dit wordt de uitzondering genoemd. Als de uitzondering echter niet kan worden afgehandeld, wordt het programma beëindigd. In Java,uitzonderingen erven van de klasse Throwable. Aangevinkte Uitzonderingen zijn uitzonderingen waarop de afhandeling wordt afgedwongen door de compiler. Runtime-uitzonderingen zijn een soort uitzonderingen die niet worden gecontroleerd door de compiler.
Wat is een gecontroleerde uitzondering?
Aangevinkte uitzonderingen zijn objecten van de klasse java.lang.exception of de subklassen ervan (behalve de java.lang. RuntimeException en de subklassen). Gecontroleerde uitzonderingen worden tijdens het compileren "gecontroleerd". Dat betekent dat de programmeur deze uitzonderingen moet onderscheppen of weggooien, anders zou de compilatie klagen (waardoor een compilerfout ontstaat). Om deze reden zijn veel gecontroleerde uitzonderingen zeer goed bekend bij programmeurs. De IOException en zijn subklassen zijn bijvoorbeeld gecontroleerde uitzonderingen, en wanneer de programmeur te maken heeft met het openen of wijzigen van een bestand, controleert de compiler of alle mogelijke IOExceptions worden afgehandeld door de programmeur.
Wat is een runtime-uitzondering?
Runtime-uitzonderingen bestaan uit java.lang. RuntimeException en al zijn subklassen. Theoretisch gezien hebben ze hetzelfde doel als gecontroleerde uitzonderingen en kunnen ze worden gegooid of behandeld als gecontroleerde uitzonderingen, maar de afhandeling ervan wordt niet afgedwongen door de compiler. 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 Checked Exception en Runtime Exception?
Hoewel zowel gecontroleerde uitzonderingen als runtime-uitzonderingen ongewenst voorkomen tijdens de uitvoering van een programma, hebben ze hun verschillen. Afhandeling van gecontroleerde uitzonderingen wordt afgedwongen door de compiler, maar runtime-uitzonderingen zijn dat niet. Daarom moeten aangevinkte uitzonderingen worden gegenereerd of afgehandeld om de code te laten compileren, maar er is geen dergelijke vereiste met betrekking tot runtime-uitzonderingen. Daarom behoren runtime-uitzonderingen samen met fouten tot de niet-gecontroleerde uitzonderingscategorie.
Nadeel van aangevinkte uitzonderingen is dat de programmeur ermee om moet gaan, ook al weet ze niet hoe. Dus als de programmeur gewoon een nieuwe uitzondering gooit zonder het origineel te omwikkelen, gaat de stacktracering die bij de oorspronkelijke uitzondering hoort, verloren. Dit is waar runtime-uitzonderingen van pas komen. Omdat alle runtime-uitzonderingen op één plek kunnen worden afgehandeld, kunnen programmeurs minder code schrijven. Aan de andere kant, aangezien gecontroleerde uitzonderingen moeten worden opgevangen, is er geen verrassing voor de programmeur. Ze zal altijd weten welke aangevinkte uitzondering door een bepaalde methode kan worden gegenereerd. In tegenstelling hiermee kunnen verschillende runtime-uitzonderingen worden gegenereerd zonder medeweten van de programmeur.