2013-08-30 11 views
5

Ran über etwas, das mich verwirrt hat. Warum muss ich hier in der Methodensignatur nicht "Exceptions werfen" deklarieren?Warum muss ich Exception hier nicht fangen?

public static void main(String[] args) { 
     try 
     { 
      System.out.println("foo"); 
      // throw new Exception(); 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
    } 

Jetzt, wenn ich die auskommentierte Zeile aktivieren, zwingt es mich, es zu deklarieren, was ich erwarten würde. Ich nehme an, dies qualifiziert mehr in der Java-Puzzle-Kategorie und es nervt mich wirklich, dass ich es nicht herausfinden kann :)

+0

Ich bekomme den Compilerfehler 'nicht gemeldete Ausnahme java.lang.Exception; muss abgefangen oder für geworfen erklärt werden, selbst wenn "neue Exception werfen();" auskommentiert ist. – rgettman

+0

@gerttman Java-Version? Weil ich nicht auf 7. –

+0

Dies ist JLS (wenn nicht Compiler) -abhängig. –

Antwort

8

Der Compiler macht Datenflussanalyse und erkennen, dass die einzigen Ausnahmen, die in diesem Segment ausgelöst werden können deaktiviert. Was Sie also erneut werfen, ist eine ungeprüfte Ausnahme, für die keine Deklaration erforderlich ist.

+0

Interessant. Ich habe das Beispiel gestohlen (und in ein main() umgewandelt) von einem Open-Source-Tool, das einige Tricks mit der Ausnahmebehandlung gemacht hat und dies gesehen hat. Es hatte einen viel komplizierteren Versuchsblock, aber ich schätze, die Strömungsanalyse hat es herausgefunden. –

Verwandte Themen