なぜ、finallyブロックが実行されるのですか?

サンプルコード:

public class TestMain {

    public static void main(String[] args) {
        try {
            System.out.println("1");
        } catch (Exception e) {
            System.out.println("2");
        } finally {
            System.out.println("3");
        }
    }
}

出力:
ここに画像を挿入説明

サンプルコードを見て、異常IIを表示されます。

public class TestMain {

    public static void main(String[] args) {
        try {
            int i = 1 / 0;
        } catch (Exception e) {
            System.out.println("2");
        } finally {
            System.out.println("3");
        }
    }
}

出力:
ここに画像を挿入説明

発生し、コードの最後にブロックが実行される異常がないかどうか、二つの結果から見ることができます。

なぜ最終的には、コードのブロックが実行されます

直接バイトコードレベルから、理由を分析します

サンプルコードのバイトコードの部分:

ここに画像を挿入説明

サンプルコード2つのバイトコードセクション:

ここに画像を挿入説明

より顕著一つ、二つ、三つ(3)バイト・コード・セクションは、論理のtryブロックの部分を表し、第2の部分は(catchブロックロジックは、最終的に、ブロック・ロジックに三つの部分を表す表す何バイトコードが存在しません部門はただ三つの部分の境界を大まかに分析描くためには、非常に明確です)

それは見つけることができ、その後、二つの部分の一部は、3つの部分のバイトコードが表示されます。

概要

それは結論することができる例は上記のバイトコード、コードをコンパイルするJavaコンパイラ、最終的に内容をブロックします、コピー、すべてはtryブロックとcatchブロックの正常と異常な実行パスに入れましたデコンパイルバイトコードが最終的にも簡単にそれが最終的に実行をブロックします理由ですバイトコードの複数のコピーの存在下で見るためにどこからの出口の実行パス、。

公開された297元の記事 ウォンの賞賛311 ・は 50000 +を見て

おすすめ

転載: blog.csdn.net/weixin_38106322/article/details/105182866