Checked Exception vs Runtime Exception
Ausnahmen sind spezielle Arten von Ereignissen, die den normalen Programmablauf stören können. Die Namensausnahme stammt von „außergewöhnlichem Ereignis“. Beim Auslösen einer Ausnahme wird ein Ausnahmeobjekt erstellt und an das Laufzeitsystem übergeben. Wenn das Laufzeitsystem das Ausnahmeobjekt empfängt, versucht es, jemanden zu finden, der es innerhalb des Aufrufstapels verarbeitet, indem es es in umgekehrter Reihenfolge (in der die Methoden aufgerufen wurden) durchläuft. Das Laufzeitsystem ist erfolgreich, wenn es eine Methode mit einem Ausnahmebehandler findet. Der Ausnahmebehandler ist ein Codeblock, der diese 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 JavaAusnahmen erben von der Throwable-Klasse. Aktivierte Ausnahmen sind Ausnahmen, bei denen die Behandlung vom Compiler erzwungen wird. Laufzeitausnahmen sind eine Art von Ausnahmen, die vom Compiler nicht überprüft werden.
Was ist eine überprüfte Ausnahme?
Überprüfte Ausnahmen sind entweder Objekte der Klasse java.lang.exception oder ihrer Unterklassen (mit Ausnahme der java.lang. RuntimeException und ihrer Unterklassen). Überprüfte Ausnahmen werden beim Kompilieren "überprü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 bekannt. Beispielsweise sind die IOException und ihre Unterklassen geprüfte Ausnahmen. Wenn der Programmierer auf eine Datei zugreift oder diese ändert, überprüft der Compiler, ob alle möglichen IOExceptions vom Programmierer erledigt werden.
Was ist eine Laufzeitausnahme?
Laufzeitausnahmen bestehen aus java.lang. RuntimeException und allen zugehörigen Unterklassen. Theoretisch dienen sie demselben Zweck wie geprüfte Ausnahmen und können wie geprüfte Ausnahmen ausgelöst oder behandelt werden, aber die Behandlung dieser Ausnahmen wird vom Compiler nicht erzwungen. Daher gehören Laufzeitausnahmen zur Familie der nicht aktivierten Ausnahmen. NullPointerException, NumberFormatEception, ClassCastException und ArrayIndexOutOfBoundsException sind häufige Laufzeitausnahmen in Java.
Was ist der Unterschied zwischen der überprüften Ausnahme und der Laufzeitausnahme?
Obwohl sowohl geprüfte Ausnahmen als auch Laufzeitausnahmen während der Ausführung eines Programms unerwünscht auftreten, weisen sie ihre Unterschiede auf. Die geprüfte Ausnahmebehandlung wird vom Compiler erzwungen, Laufzeitausnahmen jedoch nicht. Daher müssen geprüfte Ausnahmen ausgelöst oder behandelt werden, damit der Code kompiliert werden kann. Für Laufzeitausnahmen besteht jedoch keine solche Anforderung. Folglich gehören Laufzeitausnahmen zusammen mit Fehlern zur Kategorie der nicht aktivierten Ausnahmen.
Nachteil bei aktivierten Ausnahmen ist, dass die Programmiererin damit umgehen muss, auch wenn sie nicht weiß, wie. Wenn der Programmierer also nur eine neue Ausnahme auslöst, ohne das Original zu verpacken, geht die zur ursprünglichen Ausnahme gehörende Stapelverfolgung verloren. Hier bieten sich Laufzeitausnahmen an. Da alle Laufzeitausnahmen an einem einzigen Ort behandelt werden können, können Programmierer weniger Code schreiben. Da geprüfte Ausnahmen abgefangen werden müssen, ist es für den Programmierer keine Überraschung. Sie wird immer wissen, welche geprüfte Ausnahme durch eine bestimmte Methode ausgelöst werden könnte. Im Gegensatz dazu können verschiedene Laufzeitausnahmen ohne Wissen des Programmierers ausgelöst werden.