2016-04-05 7 views
0

この質問はすでに他のところでカバーされている場合は、まずお詫び申し上げます。私は初心者です。いくつかの話題は私にとってはあまりにも複雑です。Java:メソッド内の変数のライフサイクル

私は、メソッドの先頭で変数'x=0」を宣言してから"for() {}"のブロックが'x'はまだ45を戻した理由を中括弧を閉じるに終了したとき'x'が45

まで建設されたfor()方法を使用?ブロック内のxのライフサイクルは{}の完了時に終了すると思いましたか?

誰かがこれを明確にしてもらえますか?ローカル変数は、それが最も内側のブロックの最後に宣言された時点から存在

多くのおかげで、

public class Demo4 { 
    public static void main(String args[]) { 
     int i; 
     int x = 0; 

     for (i = 0; i < 10; i++) { 
      x += i; 
     } 
     System.out.println(x); 
    } 
} 
+0

なぜ 'x'は0でないのですか?その範囲内で値を変更しました。どのようにして10から45を得ましたか? –

+0

0から9までの整数の合計は45です。 –

答えて

2

。どのコンストラクトが変数を使用するかは重要ではありません。あなたの場合、xは、main()の末尾まで存在します。

しかし、forループのための特別なルールがあります:

for (int i = 0, x = 0; i < 10; i++) { 
    x += i; 
} 
:あなたは forヘッダの一部として変数を宣言した場合 xがループの実行中にのみ存在するとして、あなたは、あなたが望むものを達成ます

注これは異なっていること。

(あなたも外にそれを初期化し、ループのみヘッダ内のint x = 0を持っている必要があり、あなたはそれが外に宣言したい場合、これはまた、ループヘッダ内のiを宣言することに注意してください。)変数insiを宣言するその変数が各反復で再初期化されるようにループ、デ:

for (int i = 0; i < 10; i++) { 
    int x = 0; 
    x += i; 
} 
0

Javaで変数のライフサイクルは、変数を宣言しているブロックに留まります。ブロック内のブロックは子ブロックであるとみなし、親ブロックで宣言された変数は子ブロックに渡します。しかし、内部(子)ブロック内の変数を宣言する場合は、外部(親)ブロックでは使用できません。以下のコードのように

public static void main(String args[]) { 

    for (i = 0; i < 10; i++) { 
     int x = 0; 
     x += i; 
    } 
    System.out.println(x); 
} 

あなたは上記のコードを使用している場合、それはエラーになります。 xはforループブロックで宣言されており、そのブロックはそのブロックの外側ではない範囲内にしか存在しません。

あなたが投稿したコードは、外側のブロックにxがあり、forループはそのブロックの内側にあります。だからあなたがループのためにそれを使用するとき、それは動作します。

関連する問題