Geprüfte Ausnahme vs. Laufzeitausnahme
Ausnahmen sind besondere Arten von Ereignissen, die den normalen Programmablauf stören können. Der Name Ausnahme kommt von „außergewöhnliches Ereignis“. Das Auslösen einer Ausnahme ist der Vorgang, bei dem ein Ausnahmeobjekt erstellt und an das Laufzeitsystem übergeben wird. Wenn das Laufzeitsystem das Ausnahmeobjekt empfängt, versucht es, jemanden zu finden, der es innerhalb des Aufrufstapels behandelt, indem es es in der umgekehrten Reihenfolge durchläuft (in der die Methoden aufgerufen wurden). Das Laufzeitsystem ist erfolgreich, wenn es eine Methode mit einem Ausnahmebehandler findet. Der Ausnahmehandler ist ein Codeblock, der die besagte Ausnahme offiziell behandeln kann. Wenn das Laufzeitsystem einen geeigneten Handler findet, übergibt es das Ausnahmeobjekt an den Handler. Dies wird als Abfangen der Ausnahme bezeichnet. Wenn die Ausnahme jedoch nicht behandelt werden kann, wird das Programm beendet. In Java erben Ausnahmen von der Throwable-Klasse. Geprüfte Ausnahmen sind Ausnahmen, deren Behandlung vom Compiler erzwungen wird. Laufzeitausnahmen sind eine Art von Ausnahmen, die nicht vom Compiler geprüft werden.
Was ist eine aktivierte Ausnahme?
Checked Exceptions sind entweder Objekte der Klasse java.lang.exception oder ihrer Unterklassen (mit Ausnahme der java.lang. RuntimeException und ihrer Unterklassen). Geprüfte Ausnahmen werden zur Kompilierzeit „geprüft“. Das bedeutet, dass der Programmierer diese Ausnahmen entweder abfangen oder auslösen muss, sonst würde sich die Kompilierung beschweren (was einen Compilerfehler verursacht). Aus diesem Grund sind Programmierern viele geprüfte Ausnahmen sehr gut bekannt. Beispielsweise sind die IOException und ihre Unterklassen geprüfte Ausnahmen, und immer wenn der Programmierer mit dem Zugriff auf oder dem Ändern einer Datei zu tun hat, prüft der Compiler, um sicherzustellen, dass alle möglichen IOExceptions vom Programmierer erledigt werden.
Was ist eine Laufzeitausnahme?
Runtime Exceptions bestehen aus java.lang. RuntimeException und all seinen Unterklassen. Theoretisch dienen sie demselben Zweck wie geprüfte Ausnahmen und können wie geprüfte Ausnahmen ausgelöst oder behandelt werden, aber ihre Behandlung wird nicht vom Compiler erzwungen. Daher gehören Runtime-Ausnahmen zur Familie der ungeprüften Ausnahmen. NullPointerException, NumberFormatEception, ClassCastException und ArrayIndexOutOfBoundsException sind gängige Laufzeitausnahmen in Java.
Was ist der Unterschied zwischen Checked Exception und Runtime Exception?
Obwohl sowohl geprüfte Ausnahmen als auch Laufzeitausnahmen unerwünschte Ereignisse während der Ausführung eines Programms sind, haben sie ihre Unterschiede. Die Behandlung von geprüften Ausnahmen wird vom Compiler erzwungen, Laufzeitausnahmen jedoch nicht. Daher müssen geprüfte Ausnahmen ausgelöst oder behandelt werden, damit der Code kompiliert werden kann, aber es gibt keine solche Anforderung in Bezug auf Laufzeitausnahmen. Folglich gehören Laufzeitausnahmen zusammen mit Fehlern zur Kategorie der ungeprüften Ausnahmen.
Nachteil bei geprüften Ausnahmen ist, dass der Programmierer damit umgehen muss, auch wenn er nicht weiß, wie es geht. Wenn der Programmierer also einfach eine neue Ausnahme auslöst, ohne das Original zu umschließen, geht der Stack-Trace der ursprünglichen Ausnahme verloren. Hier sind Laufzeitausnahmen praktisch. Da alle Laufzeitausnahmen an einem einzigen Ort behandelt werden können, müssen Programmierer weniger Code schreiben. Da andererseits geprüfte Ausnahmen abgefangen werden müssen, gibt es für den Programmierer keine Überraschung. Sie wird immer wissen, welche geprüfte Ausnahme von einer bestimmten Methode ausgelöst werden könnte. Im Gegensatz dazu können verschiedene Laufzeitausnahmen ohne Wissen des Programmierers geworfen werden.