2016-07-18 10 views
-5

Ich habe eine Methode mit einer geprüften Ausnahme für eine Elternklasse, die Ausnahmen von der Art, Eltern und UnterklasseWird ein Unterklassen-Catch-Block eine überprüfte Parent-Exception fangen?

public void method() throws ParentException { 
    if(false) throw new ParentException(); 
    else if(true) throw new ChildException(); // this one is thrown 
} 

und ich habe eine Kaskade catch-Block, der erste hat das Kind Ausnahme

try { 
    method(); 
} catch (ChildException e) { 
    // I get here? 
} catch (ParentException e) { 
    // or here? 

} 
werfen

Welcher Block fängt die ausgelöste Ausnahme ab? Da die Methode explizit nur die ParentException deklariert. Wird die ChildException als Instanz von ParentException angezeigt?

+0

Warum in der Welt hat diese Frage so viele Downvotes? –

Antwort

2

Der catch Block fängt immer die spezifischste Ausnahme ab, die ihm zur Verfügung steht, und arbeitet sich von der Vererbungshierarchie hoch.

Ich möchte betonen, dass Ihre catch-Blöcke Muss in der Vererbungshierarchie Ordnung sein; das heißt, Sie dürfen keinen catch Block mit ParentException gefolgt von ChildException deklarieren, da dies ein Kompilierungsfehler ist. Was Sie dort haben (in Bezug auf catch Blöcke) ist gültig.

Ein häufiger Anwendungsfall ist dies bei der Verarbeitung von Datei-IO; Sie können zuerst FileNotFoundException, dann IOException fangen, sollte der Fehler weniger spezifisch sein als FileNotFoundException.

+0

also würde es in der ersten gehen, so etwas wie eine interne Instanz von? – Sajhu

Verwandte Themen