


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:
- Wenn eine Ausnahme innerhalb eines Catch- oder Final-Blocks ausgelöst wird, die aus diesem Block heraus weitergegeben wird, wird die aktuelle Ausnahme automatisch abgebrochen und vergessen.
- Die neue Ausnahme beginnt mit dem Abwickeln des Stapels und hält sich dabei an alle Catch- oder Final-Blöcke.
- Bemerkenswert ist, dass eine neue Ausnahme, die in einem Catch-Block ausgelöst wird, immer noch dem Final-Block dieses Catchs unterliegt, falls vorhanden.
Ausnahmefluss verfolgen
Vor diesem Hintergrund verfolgen wir die Ausführung des Code-Snippets Schritt für Schritt:
- Die Das Programm startet in der Hauptmethode und gibt „1“ aus.
- Eine Ausnahme wird in der q-Methode ausgelöst und vom Catch-Block in Main abgefangen.
- Im Catch-Block wird eine neue Ausnahme erstellt. MyExc2, wird geworfen. Dadurch wird die ursprüngliche Ausnahme MyExc1 abgebrochen.
- Die MyExc2-Ausnahme wird aus dem Catch-Block in den Final-Block weitergegeben.
- Der Final-Block gibt „2“ aus. Vor dem Verlassen der q-Methode löst der „final“-Block jedoch eine neue Ausnahme aus, die mit dem Abwickeln des Stapels beginnt.
- Die neue Ausnahme ist eine Ausnahme, die nicht im Catch-Block der q-Methode abgefangen wird.
- Die Exception-Ausnahme breitet sich aus der q-Methode in den „finally“-Block in der „main“-Methode aus.
- Der „finally“-Block in der „main“-Methode gibt „3“ aus und löst dann eine „MyExc1“-Ausnahme aus.
- Die Die MyExc1-Ausnahme breitet sich aus der Hauptmethode aus und wird von der virtuellen Maschine abgefangen.
Verstehen der Ausgabe
Aus dieser Ablaufverfolgung können wir Folgendes erkennen:
- Die letzte Ausnahme, die sich aus der Hauptmethode heraus verbreitet, ist MyExc1.
- Der Stack-Trace enthält „132“, was der vom Programm gedruckten Ausgabe entspricht.
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!

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Dreamweaver CS6
Visuelle Webentwicklungstools

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver Mac
Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.