コードは以下の通りであります:
1 パッケージTEST1。 2 3 パブリック クラスEmbededFinally { 4 5 6 パブリック 静的 ボイドメイン(文字列引数[]){ 7 8 int型の結果。 9 10 のtry { 11 12 のSystem.out.println( "レベル1" )。 13 14 15 トライ{ 16 17 のSystem.out.println( "レベル2" )。 18 // 結果= 100/0。 // レベル2 19 20 試してみます{ 21 22 のSystem.out.println( "レベル3" )。 23 24 結果= 100/0。 // レベル3 25 26 } 27 28 キャッチ(例外e){ 29 30 のSystem.out.println( "レベル3:" + 。e.getClass()のtoString())。 31 32 } 33 34 35 最後に、{ 36 37 のSystem.out.println( "レベル3では、最終的に" )。 38 39 } 40 41 42 // 結果= 100/0。 // レベル2 43 44 45 } 46 47 キャッチ(例外e){ 48 49 のSystem.out.println( "レベル2:" + 。e.getClass()のtoString())。 50 51 } 52 最後に{ 53 54 のSystem.out.println( "レベル2で最終的に" )。 55 56 } 57 58 // 結果= 100/0。 // レベル1 59 60 } 61 62 キャッチ(例外e){ 63 64 のSystem.out.println( "レベル1:" + 。e.getClass()のtoString())。 65 66 } 67 68 最後に、{ 69 70 のSystem.out.println( "レベル1では、最終的に" )。 71 72 } 73 74 } 75 76 }
図の演算結果として:
コードの分析のために:出力の最初の3行、3は通常の出力文でみてください、そして最終的にはゼロ誤差によってスローされます。そして、この文をキャプチャするフレーズをキャッチし、出力文。しかし、我々はcatch文が実装されますが、直接、最終的にはステートメントを実行されていないの背中を見つけるだろう、文は最終的に出力コードのロジックを変更し説明しました。しかし、具体的な原因は明らかではありません。
最後に、小さな質問は:finally文は、それを実行するのだろうか?
私は最終的に文が実行されません、あなたが最終的に前に出を使用している場合、プログラムを終了し、この質問を自分で答えることがあります。
たとえば、我々は次のテストコードを使用します。
1 パッケージTEST1。 2 パブリック クラスSystemExitAndFinally { 3 4 5 パブリック 静的 ボイドメイン(文字列[]引数) 6 { 7 8 試み{ 9 10 11 のSystem.out.println( "主に" )。 12 13 スロー 新しい例外(「例外がメインにスローされます」); 14 15 // でSystem.exit(0); 16 17 18 } 19 20 キャッチ(例外e) 21 22 { 23 24 のSystem.out.println(e.getMessage())。 25 26 でSystem.exit(0 ); 27 28 } 29 30 最後に 31 32 { 33 34 のSystem.out.println( "最終的に" )。 35 36 } 37 38 } 39 40 41 }
図に示す実行結果:
我々は最終的に文が出力されていない後、プログラムを終了する前に文がどんな影響を与えない、ことがわかります。