Was passiert, wenn beide fangen und schließlich blockieren die Ausnahme?Was passiert, wenn beide fangen und schließlich blockieren die Ausnahme?
Antwort
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.
wurden versucht, dies zu tun, nur um sicherzustellen, dass ich jede Ausnahmebedingungsnachricht von meinem Blockcode im Versuch zu kontrollieren. Ich selbst Ausnahme Ausnahmefehler –
Die letzte ausgelöste Ausnahme wird ausgelöst.
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.
Seine bereits beantwortet auch durch adrianbanks, aber der folgende Beitrag sollte interessant sein: Interesting Exception Results: Throwing Exceptions From the Finally Block
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.) –
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,
Hmm, das habe ich gerade ausprobiert und das hat schließlich tatsächlich geklappt. – agentnega
- 1. Rückkehr von der Funktion durch Catch-Block, was passiert, um schließlich zu blockieren?
- 2. Codeabdeckung schließlich blockieren
- 3. Wird schließlich vollständig ausgeführt, wenn eine Ausnahme in schließlich Block
- 4. was passiert mit den Ausnahmen, wenn versuchen, das schließlich nur anstelle von fangen und wie es behandelt?
- 5. Was passiert, wenn ich eine Ausnahme erstelle?
- 6. Was passiert, wenn catch blockiert oder eine Ausnahme blockiert?
- 7. Zugang Objective-c Ausnahme schließlich in
- 8. Was ist die genaue Reihenfolge der Ausführung für versuchen, fangen und schließlich?
- 9. Was die Reihenfolge der Ausführung in Versuch, zu fangen und schließlich
- 10. Hinzufügen Rückkehr in schließlich versteckt die Ausnahme
- 11. Was passiert, wenn ich try catch und schließlich runable für den Handler benutze?
- 12. versuchen, zu fangen, schließlich die automatische Vervollständigung Muster in IntelliJ
- 13. Functional Override: Was passiert und wenn
- 14. Ausnahme in Java Umgang schließlich
- 15. Was passiert, wenn update_all fehlschlägt?
- 16. Was passiert, wenn ein .NET-Thread eine Ausnahme auslöst?
- 17. Was passiert, wenn veröffentlicht
- 18. Was passiert, wenn make_shared
- 19. Was passiert, wenn ein finally-Block eine Ausnahme auslöst?
- 20. Fangen Ausnahme im Code
- 21. Was passiert, wenn die mobile Bereitstellung abläuft?
- 22. Was passiert, wenn die TestFlight-App abläuft?
- 23. Fangen Ausnahme in Konstruktor
- 24. jvm Ausnahme fangen
- 25. Was passiert, wenn Kernel delayed_work
- 26. Was passiert, wenn kfree Funktion
- 27. Was passiert, wenn php.ini fehlt?
- 28. Was passiert, wenn NSTimer in
- 29. Was passiert eigentlich, wenn ApplicationCommands.Close
- 30. Was passiert, wenn Öffnen fehlschlägt?
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. –
@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). –
@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