Exceptions werfen + beenden

Status
Nicht offen für weitere Antworten.

Dag B.

Aktives Mitglied
Hallo,

mir ist der ganze Kram mit den Exceptions überhaupt nicht klar.

Bisher hab ich immer sowas gebaut:
[Java] public static char[] return_characters()
throws Exception
{
if(is_init == true)
return characters;
else
throw new Exception("Chars not initialized");
}[/code]

Ein Kumpel meinte jetzt zu mir, dass wäre ganz furchtbar, weil die Exception nicht abgefangen wird.
Das Programm soll aber definitiv abbrechen, wenn der Fehler auftritt, da ohne die characters nicht weitergearbeitet werden kann.
Wenn ich nun aber try - catch drumbaue, muss ich irgendeinen Rückgabewert angeben. Das ist in meinen Augen aber sinnlos, weil der ja nach Programmabbruch nie erreicht wird.
Also quasi so:

Java:
    public static char[] return_characters()
    {
        if(is_init == true)
            return characters;
        else
            try {
            throw new Exception("Chars not initialized");
        } catch (Exception ex) {
            System.err.println(ex);
            System.exit(-1);
            char[] charreturn = {' ', ' '};
            return charreturn; //Needed so the method does compile, but never reached
        }
Ohne die unteren beiden Zeilen muckt er rum, aber die sind ja komplett sinnlos.

Wie baut man das also richtig, ohne solchen Mumpitz mit dem return anhängen zu müssen?
Ist die obere Version wirklich solch schlechter Stil und sollte vermieden werden?

Danke schonmal. :)
 

Dag B.

Aktives Mitglied
Ah! Sehr gute Idee, dank dir.
Werde mal schauen ob man das bei all meinen Exceptions so einfach ummodeln kann. :)
 

Marco13

Top Contributor
Ja, eine Exception zu werfen, die man selbst in der nächsten Zeile fängt ist wirklich sinnfrei. Vor allem: Man sollte NIE (NIE NIE NIE) eine Exception werfen, sondern immer die spezifischste Exception, die möglich ist. In diesem Fall wäre vermutlich sowas angebracht:
Java:
/**
 * ....
 * @throws IllegalStateException if this stuff is not initialized
 */
public static char[] return_characters()
{
    if(!is_init)
    {
        throw new IllegalStateException("Chars not initialized");
    }
    return characters;
}
(Siehe IllegalStateException (Java 2 Platform SE v1.4.2) )
 

Dag B.

Aktives Mitglied
Ja, eine Exception zu werfen, die man selbst in der nächsten Zeile fängt ist wirklich sinnfrei.
Ja klar, aber wie machts mans sonst richtig?
Bei dem ersten von mir geposteten Quelltext wurde mir eben gesagt, dass das so auch nicht wirklich gut sei, weil ich die Exception eben überhaupt nicht abfange. :question:

Vor allem: Man sollte NIE (NIE NIE NIE) eine Exception werfen, sondern immer die spezifischste Exception, die möglich ist. In diesem Fall wäre vermutlich sowas angebracht:
(...)
Ist noch in Arbeit, ich brauche für mein Prog im Idealfall n Haufen selbstgemachter Exceptions später, um ideal zu unterscheiden.
Versuche aber eben zur Zeit erstmal überhaupt herauszufinden, wie man es denn nun "richtig" (= in gutem Stil) macht, bevor ich anfange eben in der Spezial-Exceptions-Richtung weitergehe.

Ich machs halt immer schön Schritt für Schritt, damit ich eben auch weiß was ich getan habe und warum Schritt 2 eben eine Verbesserung von Schritt 1 ist.
Hier wäre eben Schritt 2 ist besser als Schritt 1, da nicht alle Exceptions gefangen werden und man nachher noch weiß, was denn überhaupt gerade passiert ist. Aber dazu muss ich ja wiederrum erstmal genau verstehen, wie ich richtig mit den Exceptions (allgemein) umgehe...
 

Marco13

Top Contributor
Ja klar, aber wie machts mans sonst richtig?
Bei dem ersten von mir geposteten Quelltext wurde mir eben gesagt, dass das so auch nicht wirklich gut sei, weil ich die Exception eben überhaupt nicht abfange. :question:

Die Exception fängt man bestenfalls dort, wo man selbst die Methode aufruft - wenn man sie denn fangen (und nicht einfach nach oben weiterlaufen lassen) will.

Ist noch in Arbeit, ich brauche für mein Prog im Idealfall n Haufen selbstgemachter Exceptions später, um ideal zu unterscheiden.

Es gibt die Empfehlung, möglichst sparsam mit eigenen Exception-Klassen umzugehen. Die Exceptions, die es schon gibt, sind sehr allgemein (IllegalState, IllegalArgument, UnsupportedOperation...), und oft kann man diese verwenden. Nur wenn du auf "höherer ebene" spezifischere Ausnahmefälle beschreiben willst, solltest du eigene Exceptions verwenden.
 

Dag B.

Aktives Mitglied
Die Exception fängt man bestenfalls dort, wo man selbst die Methode aufruft - wenn man sie denn fangen (und nicht einfach nach oben weiterlaufen lassen) will.
Ah, ok, danke. :)

Es gibt die Empfehlung, möglichst sparsam mit eigenen Exception-Klassen umzugehen. Die Exceptions, die es schon gibt, sind sehr allgemein (IllegalState, IllegalArgument, UnsupportedOperation...), und oft kann man diese verwenden. Nur wenn du auf "höherer ebene" spezifischere Ausnahmefälle beschreiben willst, solltest du eigene Exceptions verwenden.
Ja, ich muss mal schauen, muss ja erstmal schauen was da ist. ^^
Müsste dann eben sowas wie Einlesen eines falschen Triplets abfangen (da wiederrum: Falsche Länge oder ungültige Base ist enthalten) oder einer falschen Aminosäure. Daher denke ich mal, wäre dafür spezifische Exceptions schon besser. :)
Aber bis dahin ist es bei mir auch noch etwas hin. ^^
 
M

maki

Gast
Müsste dann eben sowas wie Einlesen eines falschen Triplets abfangen (da wiederrum: Falsche Länge oder ungültige Base ist enthalten) oder einer falschen Aminosäure. Daher denke ich mal, wäre dafür spezifische Exceptions schon besser.
Da fällt mir IllegalArgumentException ein.

Gehst du davon aus, dass es i.O. ist zu Versuchen ein falsches Triplet "einzulesen" bzw. ein Objekkt in einem inkonsistenten Zustand zu erzeugen?
Ich denke nicht, und damit brauchst du imho da auch keine eigene Exception, da Programmierfehler.
 

Dag B.

Aktives Mitglied
Uff maki, da fragst du was. ^^

Das Programm liest eine ganze Sequenz ein, diese kann eben auch nicht durch 3 teilbar sein und zB aus 100 Nukleotiden bestehen.
Das letzte Triplet hätte also eine Länge von 1. EIGENTLICH sollten meine Methoden da nicht mehr drauf zugreifen bzw zumindest nicht in Tripletform.

Es ist also durchaus eine legale Eingabe und wenn ein Fehler im Programmtext, wenn es mal vorkommt.
Aber sollte man für den unwahrscheinlichen Fall dass es eben doch mal passiert nicht abbrechen können?
 
M

maki

Gast
Uff maki, da fragst du was. ^^

Das Programm liest eine ganze Sequenz ein, diese kann eben auch nicht durch 3 teilbar sein und zB aus 100 Nukleotiden bestehen.
Das letzte Triplet hätte also eine Länge von 1. EIGENTLICH sollten meine Methoden da nicht mehr drauf zugreifen bzw zumindest nicht in Tripletform.

Es ist also durchaus eine legale Eingabe und wenn ein Fehler im Programmtext, wenn es mal vorkommt.
Aber sollte man für den unwahrscheinlichen Fall dass es eben doch mal passiert nicht abbrechen können?
Worauf ich hinaus wollte war, ob es normal ist mit so einer Situtuation umgehen zu müssen(also im Progrramm zu unterscheiden) oder ob es reicht dann eine IllegalArgumentException zu werfen und das war es dann mit dem Programm...

Anscheinend ist es doch normal dass so etwas vorkommen kann.
Du kannst deiner Klasse ja die Möglichkeit geben, mittzuteilen ob eine best. Methode aufgerufen werden kann, falls das ergebnis negativ ist und die Methode trotzdem aufgerufen wird, kannstz du eine Exception schmeissen.
Die Iteratoren in Java machen es ähnlich, du kannst fragen ob es ein nächstes Element gibt ([c]hasNext[/c]), bei true darf man eben die Methode ([c]next()[/c]) aufrufen, falls man bei false trotzdem versucht das nächste Element aufzurufen, gibt es eine Exception.
 

Dag B.

Aktives Mitglied
Worauf ich hinaus wollte war, ob es normal ist mit so einer Situtuation umgehen zu müssen(also im Progrramm zu unterscheiden) oder ob es reicht dann eine IllegalArgumentException zu werfen und das war es dann mit dem Programm...
Ah, achso.
Es ist noch nicht abgesprochen welche Fehler nun wirklich zum Abbruch führen und welche nicht.

Ansage war bisher "Mach erstmal dass alles zum Abbruch führt, die Details klären wir dann später".
 

Dag B.

Aktives Mitglied
Hallo,

ich hab nochmal ne Frage:
Gibt es irgendeine Seite, wo man alle Exceptions dies standardmäßig in Java gibt nachschauen kann?
In der Doku, unter Exception sind ja nur die direkten Unterklassen, die IllegalArgumentException kann ich da zB nicht finden.
Wenn ich aber nicht weiß was es noch so gibt, kann ich natürlich auch nicht schauen in welchem Paket die sind, um sie nachzuschlagen...

Aktuell benötige ich zB eine Exception welche geworfen wird, wenn eine Variable die genutzt wird, nicht intialisiert ist.
Java:
    private static boolean is_init;
    private static char[] legal_characters;

(...Constructor, Setter für die Variablen etc...)

    /**This function returns the legal characters
     * 
     * @return The legal characters
     * @throws Exception
     */
    public static char[] return_legal_characters()
            throws Exception
    {
        if(!is_init)
        {
                throw new Exception("Legal chars not initialized");
        }
        return legal_characters;
    }

Was nutzt man da am besten bzw wo kann ich mich in der Hinsicht informieren?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Exceptions werfen oder catchen?? Java Basics - Anfänger-Themen 14
firefexx Exceptions werfen Java Basics - Anfänger-Themen 5
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
C Exceptions identifizieren Java Basics - Anfänger-Themen 5
A Exceptions mit objektreferenzen Java Basics - Anfänger-Themen 4
A Exceptions und methods Java Basics - Anfänger-Themen 2
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
A Exceptions und Packages Java Basics - Anfänger-Themen 6
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
X Exceptions Benutzereingaben Java Basics - Anfänger-Themen 4
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
L Exceptions und Konten Java Basics - Anfänger-Themen 21
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
I Wie programmiert man Exceptions? Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
C Erste Schritte Exceptions nicht verstanden Java Basics - Anfänger-Themen 2
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
J Exceptions Java Basics - Anfänger-Themen 69
C Exceptions Java Basics - Anfänger-Themen 8
C Exceptions Java Basics - Anfänger-Themen 6
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
F Exceptions Java Basics - Anfänger-Themen 6
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
N Compiler-Fehler Drei Exceptions in GUIHack für Dreiecke auf MoveButtons Java Basics - Anfänger-Themen 36
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
S Exceptions Java Basics - Anfänger-Themen 7
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
J Eclipse Exceptions Java Basics - Anfänger-Themen 2
K Schleifen und Exceptions Java Basics - Anfänger-Themen 8
K Exceptions auslagern Java Basics - Anfänger-Themen 15
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
F Erste Schritte Übung zu Exceptions Java Basics - Anfänger-Themen 24
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Int Exceptions Java Basics - Anfänger-Themen 12
M Exceptions per throws oder try Java Basics - Anfänger-Themen 4
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
T Exceptions in einer Klasse Java Basics - Anfänger-Themen 3
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
H Methoden Überflüssige Exceptions Java Basics - Anfänger-Themen 20
C Exceptions Java Basics - Anfänger-Themen 14
1 While Schleife Exceptions Java Basics - Anfänger-Themen 6
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
D Frage zu Exceptions Java Basics - Anfänger-Themen 12
M Compiler-Fehler Exceptions lieber throwen oder direkt catchen? Java Basics - Anfänger-Themen 8
T Exceptions Java Basics - Anfänger-Themen 19
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
Dit_ Input/Output Alle Exceptions protokollieren Java Basics - Anfänger-Themen 9
T Exceptions Java Basics - Anfänger-Themen 12
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
D Exceptions - Ausnahmebehandlung Java Basics - Anfänger-Themen 19
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
C Exceptions beim Beenden Java Basics - Anfänger-Themen 2
C TimerTask und Exceptions Java Basics - Anfänger-Themen 5
E Klasse öffnen, mehrere Exceptions Java Basics - Anfänger-Themen 9
C Exceptions Java Basics - Anfänger-Themen 7
G 2 Exceptions in einer Methode Java Basics - Anfänger-Themen 3
0 Exceptions mehrfach fangbar? Java Basics - Anfänger-Themen 4
O Exceptions Java Basics - Anfänger-Themen 3
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
H Diverse Exceptions - Troubleshooting Java Basics - Anfänger-Themen 3
J exceptions Java Basics - Anfänger-Themen 8
sc0p InterruptedExceptions und Exceptions - in Einem! Java Basics - Anfänger-Themen 5
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
M Fragen zu Exceptions Java Basics - Anfänger-Themen 3
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
M Exceptions aus interface-Methoden Java Basics - Anfänger-Themen 2
S File.renameTo und Exceptions / Fehlermeldung Java Basics - Anfänger-Themen 2
B Exceptions in Liste sammeln? Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
O "restliche" Exceptions fangen Java Basics - Anfänger-Themen 8
H [Stil] Exceptions in der Klasse behandeln oder throwen? Java Basics - Anfänger-Themen 62
V Aktivitätsdiagramm / Exceptions Java Basics - Anfänger-Themen 5
V Exceptions Java Basics - Anfänger-Themen 6
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
R JDom Exceptions Java Basics - Anfänger-Themen 4
R Datei einlesen mit Exceptions Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
G Exceptions - spiegeln wir da nicht einen Spiegel im Spiegel? Java Basics - Anfänger-Themen 10
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
mwildam Philosophiefrage zu Exceptions und Rückgabewerten Java Basics - Anfänger-Themen 6
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2
G Exceptions Java Basics - Anfänger-Themen 4
G ServerSocket: Exceptions und Timeout Probleme Java Basics - Anfänger-Themen 10
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
P Problem mit exceptions Java Basics - Anfänger-Themen 9

Ähnliche Java Themen


Oben