Heim >Java >javaLernprogramm >Wie funktioniert die Ausnahmeweitergabe, wenn Ausnahmen innerhalb von Catch- und Final-Blöcken in Java ausgelöst werden?
Ausnahmeweitergabe in Catch- und Final-Blöcken
Wenn in einem Java-Programm eine Ausnahme auftritt, breitet sie sich über den Stapel aus, bis sie behandelt wird durch einen geeigneten Catch-Block oder beendet das Programm. Ausnahmen können jedoch auch innerhalb von Catch- oder Final-Blöcken ausgelöst werden, was Fragen zu ihrem Ausbreitungsverhalten aufwirft.
Beachten Sie den folgenden Codeausschnitt:
<code class="java">class MyExc1 extends Exception {} class MyExc2 extends Exception {} class MyExc3 extends MyExc2 {} public class C1 { public static void main(String[] args) throws Exception { try { System.out.print(1); q(); } catch (Exception i) { throw new MyExc2(); // Exception thrown in catch block } finally { System.out.print(2); throw new MyExc1(); // Exception thrown in finally block } } static void q() throws Exception { try { throw new MyExc1(); } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); // Exception thrown in finally block } } }</code>
Wenn eine Ausnahme innerhalb eines Catch- oder Final-Blocks ausgelöst wird Für den Final-Block gilt das folgende Prinzip:
Ausnahmeüberschreibung: Wenn eine neue Ausnahme innerhalb eines Catch- oder Final-Blocks ausgelöst wird, die sich aus diesem Block heraus verbreiten soll, wird die aktuelle Ausnahme ausgeführt wird abgebrochen und die neue Ausnahme breitet sich nach außen aus und nimmt ihren Platz ein. Die abgebrochene Ausnahme wird verworfen.
Im bereitgestellten Code demonstriert das Ausnahmeszenario in den Blöcken „catch“ und „finally“ dieses Prinzip:
Wenn die Programmausführung nach dem Abwickeln des Stapels die Hauptmethode erreicht, wird folglich die MyExc2-Ausnahme ausgeführt wurde von MyExc1 überschrieben, das anschließend gedruckt und verarbeitet wird. Daher lautet die korrekte Ausgabe „132Exception in thread main MyExc1.“
Das obige ist der detaillierte Inhalt vonWie funktioniert die Ausnahmeweitergabe, wenn Ausnahmen innerhalb von Catch- und Final-Blöcken in Java ausgelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!