Javaはステートメントのブロックの実行の順序に異常、最終的に混合を投げます

コードは以下の通りであります:

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 }
コードの表示

図に示す実行結果:

我々は最終的に文が出力されていない後、プログラムを終了する前に文がどんな影響を与えない、ことがわかります。

おすすめ

転載: www.cnblogs.com/wushenjiang/p/11762084.html