2013-07-13 19 views
9

Ich versuche herauszufinden, warum ich throw Ausnahme in der Hauptmethode, während ich habe try/catch Blöcke, die diese Ausnahmen sowieso behandeln können? Auch wenn ich throws IllegalArgumentException,InputMismatchException Teil löschen, wird das Programm immer noch perfekt kompilieren und arbeiten.Werfen Ausnahme in der Hauptmethode

public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{ 
    boolean flag = true; 
    Scanner in = new Scanner(System.in); 
    do{ 
     try{ 
      System.out.println("Please enter the number:"); 
      int n = in.nextInt(); 
      int sum = range(n); 
      System.out.println("sum = " + sum); 
      flag = false; 
     } 
     catch(IllegalArgumentException e){ 
      System.out.println(e.getMessage()); 
     } 
     catch(InputMismatchException e){ 
      System.out.println("The number has to be as integer..."); 
      in.nextLine(); 
     } 
+8

Sie sind auf dem Meer und eine Person ertrinkt. Die Ausnahme ist, dass dein Freund sagt: "Oh, Mann, sieh dort hin! Er ertrinkt! Sollten wir etwas tun? ". In Ihrer' catch' Klausur können Sie Ihre 'saveTheMan()' Methode definieren. Übrigens, wenn es bereits einen Rettungsschwimmer in Methoden gibt, die Sie versuchen, unter dem 'try' Konstrukt auszuführen Es ist wirklich nicht nötig, den 'catch' clausole einzugeben, da deine Hilfe nutzlos sein wird. – Rob013

Antwort

7

Sie nur eine Ausnahme aus, wenn Sie es wollen durch eine „höhere“ Funktion behandelt werden.

(. Hinweis:. Die Ausnahme verschwindet nicht nur, wenn es geworfen wird, es immer noch behandelt werden muss)

public void functionA() throws Exception{ 
    throw new Exception("This exception is going to be handled elsewhere"); 
} 

Sie verwenden einen try/catch Block, wenn Sie die Ausnahme behandeln wollen sofort.

public void functionB(){ 
    try{ 
    throw new Exception("This exception is handled here."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 

Wenn Sie bereits ein try/catch Block mit einer Ausnahme zu fangen, dann haben Sie keine Notwendigkeit, diese Ausnahme jeder höher zu werfen.

public void functionC() throws Exception{ 
    try{ 
    throw new Exception("This exception doesn't know where to go."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 
1

Manchmal ist die anrufende Partei keine Ausnahme geworfen wollen, weil sie nicht solche Ausnahmen behandelt werden sollen. In solchen Fällen schließen wir den Code ein, der Ausnahmen mit einem try-catch-finally-Block auslösen könnte.

Aber in Fällen, in denen Sie eine bestimmte Ausnahme gezielt abfangen und versuchen möchten, etwas dagegen zu tun, oder wenn Sie eine Kunden-Ausnahme für den rufenden Teilnehmer auswerfen möchten, sollten Sie es zuerst abfangen.

Es wird nie Ausnahmen empfohlen zu schlucken und auch die gleiche Ausnahme nicht zu fangen und wieder werfen.

0

Grundsätzlich geprüfte Ausnahmen muss behandelt werden. Compiler forciert dies. Sie können das entweder mit try catch oder throws clause tun. Einer von ihnen ist ausreichend.

würden Sie zum ersten Ansatz zurückgreifen, wenn Sie durch den Aufruf von Code diese Ausnahme nicht behandeln wollen.

3

Jede Methode hat zwei Möglichkeiten, mit den Ausnahmen zu behandeln, die in diesem Verfahren auftreten können:

Erste Wahl die Ausnahme innerhalb des Verfahrens ist mit einem Haken zu behandeln und nicht weitersagen darüber. Diese Vorgehensweise ist nützlich bei der Behandlung von Fehlern, die sich nicht auf die aufrufende Methode auswirken.

Zweite Wahl ist die Ausnahme in der Methode zu fangen, kann oder kann nicht etwas tun, um die Ausnahme zu behandeln. Erzählen Sie der anrufenden Methode, dass etwas falsch gelaufen ist, also machen Sie das Notwendige. Dieser Ansatz ist sinnvoll und sollte für Ausnahmen verwendet werden, die ein Problem verursachen, die oben auf die Aufrufhierarchie propagiert werden müssen.

Ich glaube nicht, dass es wirklich eine gute Idee ist, Ausnahmen von der Hauptmethode zu werfen. Denn selbst wenn Sie es nicht werfen, wird JVM die Ausnahme erhalten und wird beendet. Das Beste, was Sie tun können, ist zu versuchen, diese Excepitons zu fangen und einige Korrekturmaßnahmen innerhalb der Haupt tun. Wenn die Ausnahme katastrophal ist, egal, ob Sie sie werfen oder nicht, wird das Programm beendet.

0

Sie behandeln Ihre Ausnahme in Ihrem Code mit try-catch. Das ist der Grund.

Verwandte Themen