Ausnahmebehandlung in Catch- und Final-Blöcken
Bei einer aktuellen Java-Aufgabe an einer Universität stieß ein Student auf den folgenden Codeausschnitt und wurde gebeten, ihn vorherzusagen seine Ausgabe:
<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(); } finally { System.out.print(2); throw new MyExc1(); } } static void q() throws Exception { try { throw new MyExc1(); } catch (Exception y) { } finally { System.out.print(3); throw new Exception(); } } }</code>
Als der Schüler mit „13Exception in Thread main MyExc2“ antwortete, waren sie überrascht, als sie herausfanden, dass die richtige Antwort „132Exception in thread main MyExc1“ war.
Ausnahmeausbreitung in Catch- und Final-Blöcken verstehen
Um die korrekte Ausgabe zu verstehen, ist es wichtig, das Verhalten von Ausnahmen in Catch- und Final-Blöcken zu verstehen. Gemäß dem Ausnahmebehandlungsmechanismus von Java:
Ausnahmefluss verfolgen
Vor diesem Hintergrund verfolgen wir die Ausführung des Code-Snippets Schritt für Schritt:
Verstehen der Ausgabe
Aus dieser Ablaufverfolgung können wir Folgendes erkennen:
Daher lautet die korrekte Ausgabe „132Exception in thread main MyExc1.“
Das obige ist der detaillierte Inhalt vonWarum erzeugt das Code-Snippet die Ausgabe „132Exception in thread main MyExc1', obwohl im Catch-Block eine MyExc2-Ausnahme ausgelöst wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!