2016-06-17 6 views
-1

Ich mache einige Code-Reinigung, Entfernen fangen Throwable und fangen Ausnahme, aber ich bemerkte einige seltsame Verhalten in Eclipse.Warum behandelt Eclipse java.lang.Exception speziell

In diesem Codeabschnitt markiert Eclipse den IOException-Pfad als nicht erreichbar, was korrekt ist, aber nicht den Ausnahmepfad. Ist der Exception-Pfad nicht gleichermaßen unerreichbar? java.lang.Exception ist eine geprüfte Ausnahme? Recht?

try { 
     log.info("Some message"); 
    } catch (IOException e) { 
     log.debug(e.getMessage(), e); 
    } catch (Exception e) { 
     log.info(e.getMessage(), e); 
    } 
+2

Say 'log' war' null', was würde in diesem Code passieren? –

+0

log.info kann immer noch eine Ausnahme auslösen. log könnte null sein, oder die info-Methode könnte eine Exception zurück in diesen Code werfen. Und es ist nicht Eclipse, die dir das sagt. es ist der Java-Compiler. – ManoDestra

Antwort

2

java.lang.Exception ist die Elternklasse aller Ausnahmen (wenn auch nicht allen Throwable s!). Da es auch das übergeordnete Element von java.lang.RuntimeException ist, können Sie immer versuchen, es zu fangen, da jedes Stück Code eine RuntimeException werfen kann.

+0

Danke, ich war sicher, dass Exception die Wurzel nur der geprüften Ausnahmen war. Wie dumm von mir :-) – pagerbak

1

Exception Der Sperranschlag ist nicht unerreichbar, weil Exception umfasst auch alle ungehemmt Ausnahmen (Ausnahmen, die RuntimeException erstrecken, welche eine Unterklasse von Exception ist). Der Unterschied zwischen aktivierten und deaktivierten Ausnahmen besteht darin, dass für die erste Methode eine Methode erforderlich ist, um die Ausnahme abzufangen und zu behandeln, oder dass die Ausnahme mit einer throws-Klausel ausgelöst werden kann. Für letztere (nicht abgehakt) existiert diese Anforderung nicht, eine Methode kann eine unkontrollierte Exception werfen, auch wenn sie nicht deklariert, dass sie sie auslösen könnte. (Weitere Informationen finden Sie unter The Catch or Specify Requirement in den Java-Lernprogrammen von Oracle).

Um festzustellen, ob ein catch Block nicht erreichbar ist, sucht der Compiler nur auf den Ausnahmen geprüft, die in dem Code in dem try Block passieren könnten.

Da Ihre catch (Exception e) auch das Abfangen von unmarkierten Ausnahmen enthält, ist es immer erlaubt, diesen Block zu haben.

Verwandte Themen