Exception oder Return-Code?

Status
Nicht offen für weitere Antworten.

Marsman

Bekanntes Mitglied
Hallo Ihr!

Ich habe mal eine grundsätzliche Frage zum Thema Ausnahmen: Wann sollte man aus einer Methode heraus Ausnahmen weiterleiten oder diese besser fangen und einen entsprechenden Returncode zurückgeben? Gibt es da so eine Art goldene Regel? :roll:

Beim Weiterleiten kann die aufrufende Methode selbst entscheiden, was getan wird. Es müssen aber ggf. Verbindungen zu im Aufrufer unbekannten Packages hergestellt werden (z.B. java.sql).

Ein Return-Code hingegen kann den Nachteil haben, dass beim mehrmaligen Aufruf einer Methode nacheinander (z.B. zum Lesen verschiedener Datensätze) mehrere verschachtelte If-Blöcke notwendig werden. Außerdem wird die Möglichkeit, ein anderes Objekt zurückzugeben, blockiert.

Ich bin mir irgendwie noch nicht ganz im Klaren, wann ich welche Technik am besten einsetzen soll. Die dritte Variante, eine eigene Exception zu definieren und zu werfen, wollte ich wegen des Aufwands erstmal außer acht lassen.



Titus
 
S

SlaterB

Gast
also grundsätzlich steht die Frage, welche Art von Fehlern du bearbeitest,
was du als Ausnahme ansiehst,
es gibt ja manchmal ganz regulär keine korrekte Lösung,
etwa beim parsen eines unbekannten Strings in eine Zahl,
da halte ich es von Java für übertrieben, ständig teure Exceptions zu schmeißen,
da kann man auch einen bestimmten Rückgabe-Typ wie null als 'geht nicht'-Fall belegen,

-----
in anderen Fällen wie fehlerhafter DB-Connection, da machen die ernsten Exceptions Sinn,
wenn eine Operation diese nicht behandelt, dann sollte man die weiterleiten,

eine UMWANDLUNG in einen bestimmten Rückgabetyp, wozu?
statt die Exception zu fangen muss nun der Aufrufer den Rückgabetyp prüfen,
wo ist der Unterschied?

das kann komfortabel sein, wenn in einem Stück Code viele Exceptionarten auftreten,
und ein Verschachtelung von if/ else die alternativen Behandlungen/ den Programmfluss viel einfacher beschreiben als lauter try/ catches

also durchaus nicht zu verachten, allgemein würde ich das aber als kein sauberes Vorgehen ansehen
 

SnooP

Top Contributor
Ich versteh's ehrlich gesagt nicht wirklich...

Eine Exception sollte überall geworfen werden... bis letztlich eine Methode auf oberster Ebene den Aufruf anderer Methoden steuert... diese kann dann alle Exceptions gleichzeitig verarbeiten...
 

Marsman

Bekanntes Mitglied
SlaterB hat gesagt.:
in anderen Fällen wie fehlerhafter DB-Connection, da machen die ernsten Exceptions Sinn,
wenn eine Operation diese nicht behandelt, dann sollte man die weiterleiten,


...dabei sehe ich nur eben das Problem, dass sich der Aufrufer mit Teilen des SQL-Package befassen muss. Ich wollte das in meiner Datenbankklasse kappseln.

Wie gesagt, mir sind die Vor- und Nachteile der jeweiligen Variante klar. Es fällt mir nur immer wieder schwer, mich für eine davon zu entscheiden. Aber dein Beitrag hat mir erstmal eine grobe Richtschnur gegeben. :wink:


Titus
 

hupfdule

Top Contributor
Marsman hat gesagt.:
...dabei sehe ich nur eben das Problem, dass sich der Aufrufer mit Teilen des SQL-Package befassen muss. Ich wollte das in meiner Datenbankklasse kappseln.
Du kannst die geworfenen Exceptions auch in eigene Exceptions wrappen. Damit kannst du das etwas detaillierter steuern.

In der Regel wirfst du Exceptions, wenn das Ergebnis ein tatsächlicher Fehler ist, der nicht auftreten sollte. In Rückgabewerten Fehlercodes unterzubringen, solltest du dir auf jeden Fall verkneifen.
 
S

SlaterB

Gast
jo, das ist dann die Situation, dass sich die Art des Fehlers verändert,
wenn der Aufrufer von SQL nix wissen darf, dann muss ein anderer Fehlertyp wie 'MyExceptionDBFehler' her,

diese Frage könnte man unabhängig von 'Exception oder Rückgabewert' betrachten,
 

Marsman

Bekanntes Mitglied
hupfdule hat gesagt.:
Du kannst die geworfenen Exceptions auch in eigene Exceptions wrappen. Damit kannst du das etwas detaillierter steuern.

Das wäre eine dritte Variante, die ich auch schon in Erwägung gezogen hatte. Allerdings war mir das zu viel Aufwand. Ich wollte vermeiden, für die eigene Exception eine eigene Klasse zu definieren. Oder darf ich das auch innerhalb meine Datenbankklasse? Also etwa so:

Code:
class Database () {
    public void setConnection() {
    try {
    ...
    } catch (SQLException excp) {
        throw new MyDBException();
    } catch (ClassNotFoundException excp) {
        throw new MyDBException();
    }

    class MyDBException extends Exception {
    ...
    }
}


Titus
 

hupfdule

Top Contributor
Marsman hat gesagt.:
Oder darf ich das auch innerhalb meine Datenbankklasse?
Natürlich darfst du das auch dort.

Aber eher so:

Code:
    } catch (SQLException excp) {
        throw new MyDBException(excp);
    } catch (ClassNotFoundException excp) {
        throw new MyDBException(excp);
    }

Damit hast du die original Exception noch in deiner Wrapper-Exception drin und kommst auch an diese Info heran, wenn sie nötig ist.
 

Marsman

Bekanntes Mitglied
SlaterB hat gesagt.:
probiert doch aus? soll dir das der Compiler sagen, nicht das Forum ;)

Ja, mach ich sonst auch. Allerdings wende ich mich an das Forum, um nach einer "vernünftigen" Lösung zu fragen. Nicht alles, was der Compiler erlaubt oder die Doku gestattet, ist auch sauberer Code.


Titus
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Einige Anfängerfragen (Return-Wert, Exception...) Java Basics - Anfänger-Themen 11
D Exception || return null Java Basics - Anfänger-Themen 2
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
G Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11

Ähnliche Java Themen


Oben