Geprüfte Ausnahme vs. Laufzeitausnahme
Ausnahmen sind spezielle Ereignisse, die den normalen Programmablauf stören können. Die Namensausnahme stammt von „außergewöhnlichem Ereignis“. Eine Ausnahme wird ausgelöst, indem ein Ausnahmeobjekt erstellt und an das Laufzeitsystem übergeben wird. Wenn das Laufzeitsystem das Ausnahmeobjekt empfängt, versucht es, jemanden zu finden, der es im Aufrufstapel behandelt, indem es in umgekehrter Reihenfolge (in der die Methoden aufgerufen wurden) durchlaufen. Das Laufzeitsystem ist erfolgreich, wenn es eine Methode mit einem Ausnahmehandler findet. Exception-Handler ist ein Codeblock, der die besagte Exception offiziell behandeln kann. Wenn das Laufzeitsystem einen geeigneten Handler findet, übergibt es das Exception-Objekt 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. Checked Ausnahmen sind Ausnahmen, bei denen die Verarbeitung vom Compiler erzwungen wird. Laufzeitausnahmen sind eine Art Ausnahmen, die vom Compiler nicht geprüft werden.
Was ist eine geprüfte Ausnahme??
Markierte Ausnahmen 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 werfen muss, andernfalls würde sich das Kompilieren beschweren (wodurch ein Compiler-Fehler verursacht wird). Aus diesem Grund sind viele geprüfte Ausnahmen Programmierern sehr gut bekannt. Beispielsweise werden die IOException und ihre Unterklassen auf Ausnahmen geprüft. Wenn der Programmierer sich mit dem Zugriff oder der Änderung einer Datei befasst, prüft der Compiler, ob alle möglichen IOExceptions vom Programmierer berücksichtigt werden.
Was ist eine Laufzeitausnahme??
Laufzeitausnahmen bestehen aus java.lang.RuntimeException und allen zugehörigen Unterklassen. Theoretisch haben sie den gleichen Zweck wie geprüfte Ausnahmen und können wie geprüfte Ausnahmen geworfen oder gehandhabt werden. Die Behandlung dieser Ausnahmen wird jedoch vom Compiler nicht erzwungen. Daher gehören Laufzeitausnahmen zur Familie der nicht geprüften Ausnahmen. NullPointerException, NumberFormatEception, ClassCastException und ArrayIndexOutOfBoundsException sind häufige Laufzeitausnahmen in Java.
Was ist der Unterschied zwischen geprüfter Ausnahme und Laufzeitausnahme??
Obwohl geprüfte Ausnahmen und Laufzeitausnahmen während der Ausführung eines Programms unerwünscht auftreten, weisen sie 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. Dies gilt jedoch nicht für Laufzeitausnahmen. Folglich gehören Laufzeitausnahmen zusammen mit Fehlern zur ungeprüften Ausnahmekategorie.
Nachteil bei geprüften Ausnahmen ist, dass der Programmierer damit umgehen muss, auch wenn er nicht weiß, wie er es tun soll. Wenn also der Programmierer nur eine neue Ausnahme auslöst, ohne das Original einzuwickeln, geht die zur ursprünglichen Ausnahme gehörende Stapelablaufverfolgung verloren. Hier können Laufzeitausnahmen hilfreich sein. Da alle Laufzeitausnahmen an einer einzigen Stelle behandelt werden können, können Programmierer weniger Code schreiben. Auf der anderen Seite gibt es keine Überraschung für den Programmierer, da geprüfte Ausnahmen abgefangen werden müssen. 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 ausgelöst werden.