Frage zu Exceptions

D

Diac

Gast
Hallo,

Habe eine kleine Frage zu Exceptions, die ein Thema sind in einem Buch.

Sind Exceptions, klar definierte, Ausnahmefehler? Also wenn im Buch selbst erfundene Exceptions, wie [c]tshirtException[/c] erklärt werden, dann wahrscheinlich nur zum Verständnis?

Bei der erfundenen Exception gehts um Polymorphie, denke dies wäre auch nicht kompilierbar.

Danke
R.
 
N

nillehammer

Gast
Das werfen von Exceptions ist in Java der Weg, den Aufrufer über das Auftreten eines Fehlers zu informieren. Es ist durchaus erlaubt und auch gängige Praxis, eigene Exceptions zu definieren, wenn keine bereits definierte Exception passt. Diese müssen, damit sie geworfen werden können, von Throwable oder einer seiner Subklassen erben. Mit Polymorphie hat das nichts zu tun.
 
D

Diac

Gast
Hallo,

Danke für die Antwort, ist jetzt klarer, wieso das man selbstdefinierte Exception deklarieren kann.
Also Throwable([c]in demfall mit dem Schlüsselwort "throws"[/c]), wird die superklasse sein, daher kann man sich im Vererbungsbaum bewegen.
Polymorphie wäre wenn etwas überschrieben wird, könnte aber auch mit Vererbung zu tun haben.

Fraglich ist noch wie man diese Ausnahmefehler einschätzen könnte, oder probiert man einfach das kompilieren?

Gruss
R.
 
N

nillehammer

Gast
Throwable ist die Superklasse aller Exceptions entweder direkt oder über mehrere Stufen.
Polymorphie wäre wenn etwas überschrieben wird,
Stimmt. Beim Ableiten von Exceptions überschreibt man deren Methoden aber eher selten. Man implementiert eher neue.
könnte aber auch mit Vererbung zu tun haben.
Das hat definitiv was mit Vererbung zu tun.
Fraglich ist noch wie man diese Ausnahmefehler einschätzen könnte, oder probiert man einfach das kompilieren?
Die Frage verstehe ich nicht. Exceptions zeigen nicht an, dass der Code an sich fehlerhaft ist sondern, dass in einem laufenden Programm ein Fehler aufgetreten ist. Damit ein Programm laufen kann, muss es natürlich vorher kompiliert worden sein.
 
T

Tomate_Salat

Gast
Schau mal bei uns ins FAQ, wir haben hier einen schönen Beitrag zu Exceptions. Mir ist auch nicht ganz klar, was du mit deinem letzten Satz meinst. Vllt kennst du den Unterschied zwischen Checked und Unchecked Exceptions nicht. Das ganze wird aber in dem geposteten Link erklärt.
 
D

Diac

Gast
Hallo,

Es ist verständlicher jetzt, vielen Dank. Werde auch den Link durchlesen. Bin gerade beim Thema Exceptions im Buch, aber es gab einige Fragen.

Also mit dem überschreiben von Methoden, meinst du die Methoden die die Ausnahmesituation auslösen? Könnte man auch das zuweisen einer Referenz meinen, z.B HemdException wird KleidungsException zugewiesen?

Der untere Satz ist nicht klar formuliert, damit meinte ich, dass man bei definierten Exceptions, sieht was sie ausgelöst hat. Aber wenn man selbstdefinierte Exceptions benutzt, welche Ausnahmen benutzt man da, wenn es schon definierte gibt? Könnte mir jemand ein kleines Codebeispiel geben und den Fehler erklären?
Unchecked müssten alle RuntimeExceptions sein, was vielleicht nicht das gleiche wie selbstdefinierte Exception sind.



Fraglich ist noch wie man diese Ausnahmefehler einschätzen könnte, oder probiert man einfach das kompilieren?


Gruss
R.
 
N

nillehammer

Gast
Checked Exceptions sind Unterklassen von Exception. Wenn du eine Methode so deklarierst, dass sie eine checked Exception wirft, dann zwingst Du den Aufrufer Deines Codes zu einem try-catch Block oder dazu, die Exception weiter zu werfen. Unchecked Exceptions sind Unterklassen von RuntimeException. Damit zwingst Du den Aufrufer zu nichts.

Checked Exceptions werden zur Anzeige von Fehlerzuständen benutzt, auf die "irgendwie sinnvoll" reagiert werden kann. Unchecked Exceptions werden benutzt, um einem Programmierer anzuzeigen, dass er einen Fehler gemacht hat. Ich tendiere inzwischen eher dazu, immer unchecked Exceptioins zu werfen.

Man sieht bei beiden am StackTrace, wo sie ausgelöst wurden. Was genau der Fehler war, kann manchmal etwas undeutlich sein, wenn sich der Programmierer nicht genug Mühe bei der Auswahl der richtigen Exception und/oder Generierung einer aussagefähigen Fehlermeldung gegeben hat.
 
D

Diac

Gast
Hallo,

Vielen Dank für die Antwort.

Man sieht bei beiden am StackTrace, wo sie ausgelöst wurden. Was genau der Fehler war, kann manchmal etwas undeutlich sein, wenn sich der Programmierer nicht genug Mühe bei der Auswahl der richtigen Exception und/oder Generierung einer aussagefähigen Fehlermeldung gegeben hat.

Meinst du vielleicht damit, die selbstdefinierten Exceptions?

Gruss
R.
 

hdi

Top Contributor
Checked Exceptions werden zur Anzeige von Fehlerzuständen benutzt, auf die "irgendwie sinnvoll" reagiert werden kann. Unchecked Exceptions werden benutzt, um einem Programmierer anzuzeigen, dass er einen Fehler gemacht hat.

Grad neulich gab es hier über checked vs unchecked eine Diskussion. Endlich einer, der das genauso sieht wie ich!

Ich tendiere inzwischen eher dazu, immer unchecked Exceptioins zu werfen.
...oder doch nicht :D

Meine Meinung: Wenn irgendwo ein Fehler auftreten kann, gegen dessen Auftreten du zur Laufzeit nichts tun kannst, dann wirf eine checked Exception. Selbst wenn dir am Ende nix übrig bleibt außer die Anzeige einer Fehlermeldung mit Programm-Terminierung. Damit wird der Aufrufer gezwungen, auf den Fehler - sollte er eintreten - zu reagieren. Beispiel: Operationen auf dem Dateisystem. Du kannst als Programmierer nicht verhindern dass ein User evtl. die nötigen Rechte für das Lesen/Schreiben einer Datei nicht hat oder ob ihm grad die Festplatte durchbrennt.

Wie schon richtig gesagt stehen solchen Fehlern die Programmierfehler entgegen: Fehler, die auftreten weil was in deiner Programmlogik nicht stimmt. Bekanntestes Beispiel: NullPointerException. Die sind nicht checked, weil sie auch gar nicht auftreten, wenn du alles richtig gemacht hast.

Aus diesem Grund tendiere ich dazu, unchecked Exceptions zu vermeiden. Ich würde ein unchecked auch niemals abfangen, denn sie sollte gar nicht auftreten. Wenn ich aber davon ausgehe dass sie manchmal auftreten kann, ohne dass ich etwas dagegen tun könnte, dann mach ich sie checked damit mich der Compiler netterweise drauf aufmerksam macht und ich eine Behandlung nicht vergesse, was sich dann "Bug" nennen würde. (Eben weil die Fehler vllt bei dir nicht auftreten, bei anderen schon).

@TO: Man sollte das Wort "Fehler" nicht zu genau nehmen.. Exceptions stellen nicht unbedingt "Fehler" dar. Deswegen heißt es Exception und nicht Error. Es sind Ausnahmesituationen, auf die gesondert reagiert werden muss. Wenn man selbst Exceptions wirft dann plant man ja nicht, einen Fehler zu integrieren. Man möchte wie nillehammer auch schon richtig sagte lediglich die Info über eine spezielle Situation weiterreichen. Exceptions sind ein wesentlicher Bestandteil von OOP-Software, auch von einer die 100% korrekt läuft und nicht einen einzigen Fehler aufweisen kann.

@nillehammer
Du widersprichst dich doch irgendwie. Warum schmeißt du Exceptions die du selbst als Programmierfehler kategorisierst? Wäre es da nicht naheliegender den Fehler zu beheben statt eine Exception zu werfen? ;) Ich habe schon im besagten Topic mitbekommen dass das der Trend tatsächlich hin zu unchecked Exceptions geht, ich verstehe aber noch immer nicht warum. Ich verstehe, dass manche checked Exceptions aus der API nerven, weil man dagegen gar nix tun kann oder will. z.B. bei Thread.sleep, wenn ich gar kein interrupt beabsichtige, ja diese try-catch-Blöcke nerven. Aber das ist imho eine Design-Fehlentscheidung aus der API, nicht grundsätzlich ein Manko der checked Exceptions. Ich verstehe nicht, warum man selbst auf checked Exceptions verzichten will, wogegen man in der Tat was tun kann. Ist doch einfach sicherer?! Die unchecked Exceptions fangt ihr ja auch ab, also wo is der Unterschied, außer das man's dummerweise vergessen kann? Ich will btw nicht das Thema umlenken, falls das jetzt nicht philosphisch werden soll. Aber ich würd's einfach gern begreifen, irgendwas muss ja an diesem Trend dran sein, aber ich seh's nicht. Alle sagen checked Exceptions waren eine Fehlentscheidung. Ich finde unchecked Exceptions waren eine Fehlentscheidung. Ich fang doch nix ab was aus kaputtem Code entsteht, ich fixe den Code.
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Jaja... Exceptions und ihre Kinder... Widersprüche und Ungereimtheiten on Mass. Die erste Ungereimtheit ist die, dass die Urklasse jeder Exception sowie die jedes Fehlers - die Klasse Throwable - in Anführungszeichen eine "checked Exception" ist, man also Instanzen dieser Klasse allein schon abfangen oder weiterleiten muß, während man dies bei Instanzen einiger ihrer Unterklassen - Fehler (Error.class) und die sog. unchecked Exceptions - nicht mehr tun muß. Wer bestimmt, wann ein Throwable unbehandelt in den Quellcode einfliessen darf? Die zweite Ungereimtheit ist; Es gibt die Klasse Error, welche man theoretisch als Urklasse aller "unchecked Exceptions" bezeichnen könnte - Die Quelltexte zeigen aber, das es nicht so ist. Wenn man nun sagt, diese RuntimeExceptions sind, wie der Name schon andeutet, Laufzeitausnahmen :)lol:), dann wurden diese definitiv vom Programmierer verursacht und sind deswegen allein schon echte Fehler, die der Programmierer keinesfalls ignorieren sollte. Aus diesem Grund wären RuntimeExceptions für mich zumindest schon mal ein kleines Manko im Design der JVM. Natürlich gibt es Laufzeitfehler, gegen die ein Programmierer manchmal nichts machen kann, wie hdi schon gesagt hat. Aber selbst bei seinem Beispiel mit der Fesplatte bekommt man, lange bevor irgendwo eine RuntimeException fliegt, schon mal eine IOException. Aber dennoch gibt es auch andere Beispiele, in denen es für einen Programmierer notwendig ist eine RTE abzufangen. Dann sollte er aber bitte keine Exception an den User seiner Software weiterreichen, sondern ihm einen echten Error mitteilen, z.B. wenn die Initialisierung einer Klasse oder eines APIs von ebenso dubioser wie nicht vorhandener Hardware abhängt - [c]HeadlessException[/c]? Wie find' ich denn das? Bekommt man diese Exception, weil man ausnahmsweise mal in der Konsole (ohne X-Server o.ä) arbeitet? Ist doch -->mein neues Lieblingswort ;).
 
S

Spacerat

Gast
@hdi: Du wohl kaum. Immerhin hast den Unterschied zwischen echten Fehlern (Error) und Ausnahmefehlern (Exception) ja schon richtig dargestellt. Sicher ist dir auch die Ironie in meiner Wortschöpfung "Laufzeitausnahme" (RuntimeException) nicht entgangen, denn mir wäre das Auftreten einer Solchen eigentlich mehr als suspekt und ich müsste mich als Prorammierer fragen, warum mein Programm ausnahmsweise mal nicht läuft und etwas dagegen tun, denn meines Wissens gibt es nur - ausser in Java - Laufzeitfehler. Kann ich aber zur Laufzeit nichts gegen einen auftretenden Fehler machen, muß ich wohl oder übel den Anwender darüber informieren, sprich; In Java eine RuntimeException abfangen und dafür einen Fehler ausgeben. "THIS PROGRAM CANNOT BE RUN IN DOS MODE" kennen sicher alle. Die HeadlessException ist - meiner Meinung nach völlig zu Unrecht - eine solche RuntimeException, denn obwohl ich als Programmierer einer GUI im weiteren Verlauf der Anwendung alles korrekt programmiert habe, kann ich nur sehr wenig dafür, wenn der Anwender diese GUI aus der Konsole ohne X-Server startet und deshalb blos diese Exception um die Ohren bekommt, weil ich mich dazu entschlossen habe, RTEs nicht zu verwenden bzw. abzufangen.
[EDIT]Ach ja... für mich sinds eher die "unchecked Exceptions", die ein Manko darstellen, eben weil es stets echte Fehler und nicht blos Ausnahmen sind.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
D Frage zum abfangen von Exceptions Java Basics - Anfänger-Themen 5
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
H Frage zum Array Java Basics - Anfänger-Themen 17

Ähnliche Java Themen


Oben