Guten Tag leute ,
mir ist nicht klar wo der Unterschied zwischeneinem Try catch block und dem throws ist . Vielmehr wann benutze ich was ? Anhand von welchen Kriterien mache ich das fest ?
Du hast checked und non checked Exceptions (Von RuntimeException abgeleitet).
Checked Exceptions müssen entweder behandelt werden (try / catch) oder weiter gegeben werden (throws auf der Methode).
Beispiel:
Code:
public void someMethod() {
somethingThatCanThrowIOException();
}
Wenn somethingThatCanThrowIOException eine IOException werfen kann (das ist eine checked Exception), dann muss man dies weiter behandeln. Der Code, den ich gebracht habe, übersetzt nicht.
Eine Möglichkeit ist zu sagen: Ich gebe es einfach weiter:
Code:
public void someMethod() throws IOException {
somethingThatCanThrowIOException();
}
Das bedeutet, meine Methode kann auch die IOException werfen. Sollte also somethingThatCanThrowIOException eine IOException werfen, dann gebe ich diese nur weiter.
Die andere Möglichkeit ist: Ich fange die Exception und behandle sie:
Code:
public void someMethod() {
try {
somethingThatCanThrowIOException();
} catch (IOException ex) {
// Do soemthing with ...
}
}
Damit kann ich dann den Fehler behandeln.
Also ich will für den Benutzer etwas machen, das geht aber nicht, also teile ich dem Anwender dies mit. Anwender will z.B. etwas speichern, aber er hat keine Rechte: Das kann ich ihm mitteilen und ihn bitten, einen anderen Ordner zu wählen oder so ...
also kann man im prinzip selber zwischen den beiden Optionen wählen und so gut wie alles mit einem try - catch Block beheben in dem ich den Fehler dann selber fange und korriegiere ?
Ja, wichtig ist: bei checked exceotions musst du eine der beiden Möglichkeiten machen.
Eine neue Exception Klasse bringt dir erst einmal nicht viel. Du kannst natürlich eine neue Klasse erstellen und dann auch diese neue Exception werfen. Da gelten dann aber auch wieder die üblichen Regeln.
Wenn du die Exception von RuntimeException ableitet, dann entfällt der Zwang, aber dann fällt die Exception durch bis zum Abbruch des Threads oder der Applikation, was in der Regel keinen Sinn macht.