[解決済み] catch節とfinally節で投げられる例外
2022-04-21 17:04:47
質問
大学の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();
}
}
}
その出力を求められたのです。 私は次のように答えました。
13Exception in thread main MyExc2
となりますが、正解は
132Exception in thread main MyExc1
. なぜ、そうなるのでしょうか?私はどうしても
MyExc2
が行く。
解決方法は?
あなたの回答を読み、あなたがどのようにそれを思いついたかを見て、あなたは"例外処理中"が"優先されると考えていると思います。 覚えておいてください。
で新しい例外が発生した場合、その例外は catchブロックまたはfinallyブロック 新しい例外が外部に伝搬されると、現在の例外は中断され、忘れ去られます。 新しい例外は、他の例外と同じようにスタックを巻き戻し、現在のブロック(catchまたはfinallyブロック)から中止され、途中で適用可能なcatchまたはfinallyブロックに従います。
なお 適用可能なcatchまたはfinallyブロック が含まれます。
新しい例外がcatchブロック内で投げられた場合、その新しい例外は、もしあれば、そのcatchのfinallyブロックに従います。
次に、実行を再確認してください。
throw
現在の例外のトレースを中断し、新しい例外のトレースを開始する必要があります。
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
-
[解決済み] スレッドからExceptionをキャッチする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
をインスタンス化することができません。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
ローカルリソースのロードが許可されていない場合の解決策