Try und Catch

Moch

Bekanntes Mitglied
Hallo,
Ich habe nochmal eine kurze Frage zum try & catch bei Java, das sich mir jetzt nicht zur Gänze erschließt.

Mir ist bewusst, dass dieses Konstrukt dazu da ist, eine Exception aufzufangen, sollte diese beim "Versuch" auftreten, um dann ggf. automatische Gegenmaßnahmen (wie erneute Eingabe) zu vernanlassen oder aber das Programm zumindest nicht sofort zu beenden.

Meine Frage jetzt: Offenbar werden alle auftretenden Exceptions aufgefangen?!?! Kann ich das irgendwie verhindern oder zumindest dafür sorgen, dass besagte ExceptionSignatur mit ausgegeben wird, damit ich mir ein Bild von der Lage machen kann, was da schief läuft.




Folgendes Problem trat auf: Ich arbeite momentan aus Spaß an einem SudokuLöserProgramm.
An einer Stelle sollte der User eine Zahl eingeben können. Für den Fall, dass der User nun nen Torfkopp ist oder sich vertippt, habe ich das umwandeln in einen Integer mit try und catch versehen und lasse das Programm die Eingabe des Users ingorieren und eine kurze Erklärung ausgeben.
Nun wurde mir jedes Mal diese Erklärung ausgegeben, obwohl meine Eingabe definitiv korrekt war.
Das Problem war schnell gefunden: Ich hatte einen Programmierfehler in der aufgerufenen Methode eingebaut, der eine OutOfBoundsException werfen musste. Offenbar wurde besagter Fehler leider abgefangen, sodass es für mich schwierig wurde, ihn zu lokalisieren.

Es ist ja schön und gut mit einem Fehler des Anwender zu rechnen, aber meine eigenen Fehler möchte ich ungerne mit auffangen, da es hier im schlimmsten Falle dazu führen kann, dass ich einen Fehler nicht bemerke, dass Programm locker flockig drüberwegbügelt und später totalen nonsense ausgibt.

liebe Grüße
Moch
 

Marco13

Top Contributor
Immer die spezifischste Exception fangen. In diesem fall
Code:
catch (NumberFormatException e) {
    System.out.println("Falsche Eingabe");
}

Normalerweise NIE sowas wie [c]catch(Exception e)[/c] (es gibt Fälle, wo man das macht, aber wer nicht weiß, wo und warum, sollte es nicht machen ;) )
 

Moch

Bekanntes Mitglied
Ahh, vielen Dank! Ich hatte offenbar einen völligen Verständnisfehler drinne...

Ich gebe also erst den Exceptiontyp (z.B. OutOfBoundsException) an und danach irgendeinen Namen?


Sorry, wir hatten Exceptions in der Vorlesung nur am Rande :-D ... ich weiß nur, was eine solche ist, wie ich selbst welche erzeuge und werfe (also eigene Exceptions) und wie ich ggf. über Try und Catch sowas abfange (mein Wissen belief sich offenbar darauf, wie ich einfach alles abfangen)

Dann vielleicht nochmal eine kurze Frage dazu: Wenn man Exceptions selbst entwickelt und die dann irgendwo einbaut, muss die ja in allen Methoden, die diese verursachen können bzw. in allen Methoden, die eine solche Methode aufrufen bzw. aufrufen können sozusagen erwähnt werden ([/code]throws IrgendwasException[/code])
Bisher macht mein Eclipse das für mich, indem ich einfach doppelt auf den Fehler klicke und sage: Hier, mach mal!

Ich kann mir vorstellen, dass dadurch bei größeren Projekte mancher Methoden-Kopf (heißts in Java so?) unübersichtlich bis nervig wird. Gibt es hier die Möglichkeit einfach generalisiert irgendwie zu sagen, dass das Ding eine Maße an Exceptions werfen kann oder muss ich definitiv jede einzelne Exception im Kopf angeben?

Liebe Grüße und nochmals vielen Dank :)
Moch
 
D

despikeexd

Gast
Das geht schon ... nur sollte man es vermeiden eine Super-Klasse von Exceptions anzugeben wenn man sich nicht 100% sicher ist was man damit tut und vor allem WARUM. In der Regel sollte man wirklich jede Exception die geworfen werden kann explizit angeben, wobei aber auch die Reihenfolge entscheident ist.
So würde dir z.B. foldendes IMMER eine IOException liefern ... egal ob nun als IOException selbst oder als Sub-Klasse
Java:
public void connect() throws IOException, SocketException
Der Grund liegt darin das SocketException eine Sub-Klasse von IOException ist, wesshalb bei der Typ-Prüfung IOException als gültige Klasse ausgewählt wird.
Genau so ist , wie hier , auch die Reihenfolge in try-catch Blöcken wichtig. Wenn du z.B. IOException VOR SocketException prüfst wirst du immer nur die IOException zu gesicht bekommen.
 

Moch

Bekanntes Mitglied
Alles klar, danke! :)

Gut, bisher verwende ich eher kaum die vorgegebenen Exceptions, sondern bastle meistens selbst welche, aber das liegt wohl eher an den Programmen, die ich schreibe.
Ich habe jetzt selbst den ersten Fall, in welchem ich eine OutOfBoundsException abfangen muss. Hierbei soll der Anwender das Feld des Sudokus angeben, welches er bearbeiten möchte. Nun könnte er aber auch das Feld 10/9 ansprechen, was eine solche Exceptions produzieren würde.

Aber das mit den Exceptions läuft bei mir jetzt.

Vielen Dank nochmals :)

Thema erledigt
 

Marco13

Top Contributor
Genau so ist , wie hier , auch die Reihenfolge in try-catch Blöcken wichtig. Wenn du z.B. IOException VOR SocketException prüfst wirst du immer nur die IOException zu gesicht bekommen.

In der falschen Reihenfolge sollte sich der Code nicht compilieren lassen.


@Moch: Man sollte mit eigenen Exception-Klassen sehr, sehr sparsam umgehen. In den ALLERmeisten Fällen reichen die, die es schon gibt (oft z.B. eine IllegalArgumentException). Das 'throws SomeException' muss man nur hinschreiben, wenn die jeweilige 'SomeException'-Klasse von 'Exception' erbt. Wenn sie von 'RuntimeException' erbt, muss man es NICHT hinschreiben. Das ist der Unterschied zwischen "checked Exception" und "unchecked Exceptions" (mal eine Websuche danach machen!). Und in den meisten Fällen sollte man, wenn überhaupt, von RuntimeException erben. (Selbst 'große' Projekte verwenden keine "checked Exceptions" mehr).
Und... ganz nebenbei: Manche Exceptions (ArrayIndexOutOfBounds oder NullPointer) sollte man NICHT abfangen. Die deuten nämlich auf einen Programmierfehler hin. Ein eindeutiges Kriterium, welche man abfangen sollte, und welche nicht, kann ich spontan aber nicht nennen.
Man sollte nur aufpassen, dass man Exceptions nicht zur "Steuerung der Programmlogik" verwendet. Exceptions sind, wie der Name schon sagt, eine Ausnahmesituation. Statt sowas wie
Code:
void setNumber(int r, int c, int value) {
    try {
        array[r][c] = value;
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Falsche eingabe");
    } catch (NullPointerException e) {
        System.out.println("Nicht initialisiert");
    }
}
sollte man besser (durch if-Abfragen oder so) vornherein verhindern, dass die Methode mit ungültigen Werten aufgerufen wird. Und wenn sie DOCH mit ungültigen Werten aufgerufen wird, kann auch die AIOOBE fliegen, weil dann ist das ein Zeichen dafür, dass ("ausnahmsweise") ein Fehler aufgetreten ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B Try-Catch Block Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
F try/catch - (else) Java Basics - Anfänger-Themen 11
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
N try and catch block in finally Java Basics - Anfänger-Themen 8
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
M Nach catch mit der schleife weitermachen Java Basics - Anfänger-Themen 9
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S sauberer Stil von return Wert (try, catch, finally) Java Basics - Anfänger-Themen 9
S try-catch Java Basics - Anfänger-Themen 10
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
H try catch Java Basics - Anfänger-Themen 4
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
D Catch wiederholt sich ständig Java Basics - Anfänger-Themen 2
T try-catch-finally Java Basics - Anfänger-Themen 8
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G try. catch Verwendung Java Basics - Anfänger-Themen 11
M Try-Catch-Problem Java Basics - Anfänger-Themen 4
G habe ein Catch problem Java Basics - Anfänger-Themen 7
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
B try & catch Problem mit Exception bzw String.split() Java Basics - Anfänger-Themen 5
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
G Bei catch beenden Java Basics - Anfänger-Themen 7
U catch mit finally Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
B catch exception funktioniert nicht! Java Basics - Anfänger-Themen 14
D Frage try and catch Java Basics - Anfänger-Themen 7
ven000m try catch - was muss bei catch rein Java Basics - Anfänger-Themen 28
G Datenbank - catch Java Basics - Anfänger-Themen 2
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
M return und try-catch Java Basics - Anfänger-Themen 6
M Try . catch erzwungen? Java Basics - Anfänger-Themen 11
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
A Syntaxproblem mit try und catch Java Basics - Anfänger-Themen 3
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
G return fehler bei try catch Java Basics - Anfänger-Themen 8
H try und catch Java Basics - Anfänger-Themen 6
A try catch UNREACHABLE CODE Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben