throws und try catch

  • Themenstarter Themenstarter Heyoka955
  • Beginndatum Beginndatum
H

Heyoka955

Gast
hallo ich hätte eine frage, wann soll man try catch verwenden und wann throw thrwos? also was ist der unterschied zwischen den beiden bei der fehlerbehandlung
 
try-catch, wenn Du eine Exception "erwartest".
throw, wenn Du eine Exception wirfst.
throws, wenn Du in der Signatur der Methode angibst, dass sie eine Exception wirft

Java:
public int read() throws IOException {
    throw new IOException();
}
public void testRead() {
    try {
        read();
    } catch (IOException ex) {
        System.out.println("von read ausgelöste IOException wurde abgefangen");
    }
 
try-catch, wenn Du eine Exception "erwartest".
throw, wenn Du eine Exception wirfst.
throws, wenn Du in der Signatur der Methode angibst, dass sie eine Exception wirft

Java:
public int read() throws IOException {
    throw new IOException();
}
public void testRead() {
    try {
        read();
    } catch (IOException ex) {
        System.out.println("von read ausgelöste IOException wurde abgefangen");
    }
das heßt man sollte wenn man eine fehlerbehandlung machen möchte, sollte man am besten throw und try catch machen denn falls das Programm nicht weiß wie man diese zu behandeln hat dann ist throw eine weitere folge um den fehler zu behandeln.
 
Das Schlüsselwort throw "wirft" eine Exception (löst also eine Ausnahme aus). Wird die Ausnahme nirgends behandelt, schmiert Dein Programm ab. Für das Abfangen einer Ausnahme verwendest Du try-catch. Die Behandlung der Ausnahme findet dabei im catch-Block statt.
 
Ich glaube du hast da was Mißverstanden Mihe. Ich denke er meint das throws hinter der Methoden Deklaration, welches eine Exception an die aufrufende Methode zurückgibt.

Gruß

Claus
 
das heßt man sollte wenn man eine fehlerbehandlung machen möchte, sollte man am besten throw und try catch machen denn falls das Programm nicht weiß wie man diese zu behandeln hat dann ist throw eine weitere folge um den fehler zu behandeln.

try catch verwendest du dort, wo du den Fehler erwartest und darauf reagieren willst. Du KANNST den Fehler danach nochmal werfen, wenn du z.B. nur eine Logzeile ausgeben willst, die Behandlung aber weiter außen durchführen möchtest.

throw verwendest du dann, wenn du selbst die Exception erzeugen willst (z.B. "unzulässiger Parameter für diese Methode").

throws erlaubt deiner Methode, zu erwartende Exceptions (z.B. beim Dateizugriff) nicht selbst zu behandeln, sondern nach außen weiterzuleiten, in der Hoffnung, dass dort jemand darauf reagiert.

ps: Bei einem nicht behandelten Fehler schmiert nicht zwingend das gesamte Programm ab, sondern nur der betreffende Thread. Du wirst das vor allem in Verbindung mit GUIs feststellen. Bei einem Fehler, der durch das Klicken eins Buttons ausgelöst wird, wird das Programm trotzdem weiterlaufen, nur eben nicht das, was durch den Klick ausgelöst wurde.
 
try catch verwendest du dort, wo du den Fehler erwartest und darauf reagieren willst. Du KANNST den Fehler danach nochmal werfen, wenn du z.B. nur eine Logzeile ausgeben willst, die Behandlung aber weiter außen durchführen möchtest.

throw verwendest du dann, wenn du selbst die Exception erzeugen willst (z.B. "unzulässiger Parameter für diese Methode").

throws erlaubt deiner Methode, zu erwartende Exceptions (z.B. beim Dateizugriff) nicht selbst zu behandeln, sondern nach außen weiterzuleiten, in der Hoffnung, dass dort jemand darauf reagiert.

ps: Bei einem nicht behandelten Fehler schmiert nicht zwingend das gesamte Programm ab, sondern nur der betreffende Thread. Du wirst das vor allem in Verbindung mit GUIs feststellen. Bei einem Fehler, der durch das Klicken eins Buttons ausgelöst wird, wird das Programm trotzdem weiterlaufen, nur eben nicht das, was durch den Klick ausgelöst wurde.
aber wieso gibt es in try blöcken Methoden aufrufe worin Methoden ein throw implementieren.
also was ist der zusammenhang mit den zusammen?
zbs try{ System.out.print(a.teiledurch0); }



public static int teiledurch0 throws Expection


was heißt das?
 
public static int teiledurch0 throws Expection
was heißt das?
Das sagt dem Compiler, dass diese Methode eine Exception werfen kann. D.h. die aufrufende Methode muss sich also darum kümmern.
Der Compiler wird also verlangen, dass du die Methode teiledurch0() nur innerhalb eines try-Blocks verwenden kannst, der die Exception per catch behandelt. Wenn du aber willst, dass der Fehler nicht abgefangen wird, sondern nach außen weitergeleitet wird, dann muss die aufrufende Methode ihrerseits wieder throws Exception im Header stehen haben (siehe Vorpost).

Exceptions können natürlich auch unvorhersehbar ohne throws im Methoden-Header entstehen, klar (bestes Beispiel: Die allseits geliebte NullpointerException). Die throws-Klausel hilft dir dabei, vorhersehbare Exceptions besser im Code behandeln zu können.
 

Neue Themen


Zurück
Oben