2009-09-26 2 views
34

Was passiert, wenn beide fangen und schließlich blockieren die Ausnahme?Was passiert, wenn beide fangen und schließlich blockieren die Ausnahme?

+0

Es gibt verschiedene Kombination | Verschachtelung Muster möglich sowohl mit einem Haken und ein schließlich blockieren. Möglicherweise möchten Sie ein Code-Snippet hinzufügen, um die Situation zu skizzieren, über die Sie nachdenken. –

+0

@Justin: (Ich bin mir nicht sicher, ob Sie davon benachrichtigt werden ...) Ich habe Ihren Tagwechsel rückgängig gemacht, weil (1) Sie Java entfernt haben, was den Bereich der Frage dramatisch verändert und (2) Sie VB hinzugefügt haben. NET, das, obwohl es in vielerlei Hinsicht korrekt ist, nicht so ist, wie es hier gemacht wird ... (mit anderen Worten, ich stimme dem zu oder entferne auch C#, da .NET dort ist). –

+0

@MarkHurd Das Problem ist, dass eine oder mehrere der Antworten auf .NET spezifische Lösungen verlinken - ich kann nicht für die Gültigkeit der Antworten in Java sprechen. Auch andere VB.Net Fragen haben Links zu dieser Frage (wie die Antwort ist die gleiche). – Justin

Antwort

32

Wenn der Block finally eine Ausnahme auslöst, wird die Ausnahme, die aus dem Block catch geworfen wird, effektiv ausgeblendet und wird schließlich verworfen. Es ist daher wichtig, Ausnahmen beim Abfangen zu protokollieren oder sicherzustellen, dass der finally-Block selbst keine Ausnahme auslöst. Andernfalls können Ausnahmen ausgelöst werden, die erstickt und nie gesehen werden.

+0

wurden versucht, dies zu tun, nur um sicherzustellen, dass ich jede Ausnahmebedingungsnachricht von meinem Blockcode im Versuch zu kontrollieren. Ich selbst Ausnahme Ausnahmefehler –

4

Die letzte ausgelöste Ausnahme wird ausgelöst.

6

Wenn catch eine Ausnahme auslöst, wird schließlich block ausgeführt und dann mit einer Ausnahme beendet. Wenn der finally-Block eine Ausnahme auslöst, wird der Block mit einer Ausnahme beendet.

+0

Also endlich, welche Ausnahme wird geworfen? aus dem finally block oder aus dem catch block? – Arthur

+4

Die letzte geworfene Ausnahme. : D – NawaMan

4

Seine bereits beantwortet auch durch adrianbanks, aber der folgende Beitrag sollte interessant sein: Interesting Exception Results: Throwing Exceptions From the Finally Block

+0

Ich habe einen Kommentar zum Blog hinzugefügt, aber das Ergebnis der Konsolenanwendung scheint zu sein, weil die CLR die (erste) unbehandelte Ausnahme während der Filterphase meldet (wenn VB.NET 'When' -Klausel verarbeitet wird) , wahrscheinlich, damit ein Debugger aufgerufen werden kann und dann die Zeile der ersten Ausnahme gesucht wird. Es wird am einfachsten bemerkt, indem man etwas in dem 'finally' vor dem' throw' druckt. Die erste Ausnahme wird protokolliert, dann wird das 'finally' verarbeitet und die zweite Ausnahme wird protokolliert. Dies betrifft .NET Framework 1.1 bis 3.5. .NET 4.0 meldet nur die erste Ausnahme. (1.0 & 4.5 nicht verfügbar.) –

-4

HALLO Nwaman Ich glaube, Sie antworten falsch ist, ich es in Windows appliaction getestet haben, fand ich, wenn u ein Programm schreiben, wie die unter einem

try 
{ 
    string s = "hu"; 
    int i = int.Parse(s); 
} 
catch (Exception ex) 
{ 
    string s = "hu"; 
    int i = int.Parse(s); 
    throw new Exception(); 
} 
finally 
{ 
    MessageBox.Show("hi"); 
} 

und dies wird schließlich nicht dazu führen, excute,

+2

Hmm, das habe ich gerade ausprobiert und das hat schließlich tatsächlich geklappt. – agentnega