Unterschied zwischen RuntimeException und Exception (Java)?
Moin, meine Frage wäre, was der Unterschied zwischen RuntimeException und Exception ist.
Nutze ich eine eigene Exception, welche im Methoden Kopf throws Exception nutzt, so muss ich in der jeweiligen Klasse in der ich meine eigene Exception nachher benutze, sprich throwe, ebenfalls meine eigene Exception im Methoden Kopf anmerken, da sonst ein Fehler auftaucht.
Anscheinend geht der Compiler nicht auf die RuntimeException ein?
Verstehe ich nicht ganz? Bitte um Aufklärung! Danke im Voraus.
2 Antworten
RuntimeException leitet von Exception ab.
Technisch gibt es keinen Unterschied, die Frage ist eher: Wann wird was geworfen?
Unterschiedliche Exception-Typen dienen also nur der Unterscheidung und dem Transport von relevanten Informationen.
Genauso leiten viele Exception-Typen von RuntimeException ab und andere leiten direkt von Exception und nicht von RuntimeException.
Das "throws" am Methodenkopf sagt nur aus, dass eine Methode eine Exception der jeweiligen Typs oder eine Ableitung davon wirft und zwingt dich beim Aufruf der Methode, diesen Exception-Typ zu behandeln.
Wenn Du nun "thows MyCustomException" schreibst, musst Du bei jedem Aufruf diese MyCustomException behandeln oder der Methode selbst einen passenden thows-Ausdruck geben und damit die Behandlung nach "oben" weiter reichen.
Exceptions sind im Grunde Fehlermechanismen
In Programmiersprachen die nicht Java sind, hast du in der Regel nur eine Art von Fehler (RuntimeExceptions)
die kernaussage ist diesbezüglich, dass du nicht gezwungen bist try catch blöcke zu benutzen.
was meine ich mit zwang?
java hat checked exceptions dessen grundgedanke es ist, dass der programmierer schon bevor das programm gestartet wird, über potenzielle fehler informiert wird
in der praxis passiert das immer wenn der programmierer eine methode benutzt dessen methodensignatur ein "throws"-statement besitzt
(bsp.: Files.readString; man sieht in der methoden signatur throws ioexception)
das throws statement "sagt" dem programmierer beim methodenaufruf etwas kann schief gehen und lässt den programmierer nicht mehr das programm starten bis der programmierer den (potenziellen) fehler im code berücksichtigt
wie geht man mit einer checked exception um?
öfters will man einen fehler einfach das programm zum absturz bringen lassen, damit sich keine potenziellen bugs verstecken in einem potenziell fehlerhaften programm (fail-fast).
deshalb werden checked exceptions auch öfters in eine runtime exception gepackt
(bsp.: IOException e -> throw new UncheckedIOException(e))
falls der schnelle absturz nicht das ziel ist
entweder:
fehleranfälliger code wird in einem try block gepackt.
bei einem fehler springt das programm in den catch block und dort wird code ausgeführt um dementsprechend darauf zu reagieren.
sonst wird im try block der code regulär ausgeführt.
oder:
man packt ein throws an die signatur der methode die man gerade schreibt.
in anderen worten: man überlässt den ganzen stress dem nächsten kek, der sich mit der methode, die gerade geschrieben wird, beschäftigt.
der fehler wird einfach zum nächsten methodenaufruf delegiert