Javaのfor文では、ブロック内で扱う変数をどこでも宣言できる。どこでもというのは、for文の初期化位置、ブロック内、for文の外、いずれでもだ。
サンプルプログラムを見ながら確認しておこう。
目次
forのブロック内変数の扱い方
Javaのfor文のブロック内で使う変数がどこで宣言できるかというと、for文の初期化、for文のブロック内、for文の外で宣言できる。
[for文の外]
for ( [for文の初期化] ; ; ) { ← 「{」がブロックの始まり
[for文のブロック内]
} ← 「}」がブロックの終わり
まず、for文の初期化で宣言された変数を考えてみよう。次のfor文はnumberを1から10までインクリメントして、最後のnumberの値をlastNumberに残すようにいている。
1 2 3 4 |
for (int number = 1, lastNumber = 0; number <= 5; number++) { int lastNumber = number; System.out.println("lastNumber:" + lastNumber); } |
この場合、変数lastNumberは初期化で宣言した後0が代入され、ブロック内で変数として使われる。この使い方は問題ない。しかし、lastNumberをfor文の繰り返しが終わった後、for文のブロックの外で使おうとするとエラーが起きる。
1 2 3 4 |
for (int number = 1; number <= 5; number++) { int lastNumber = number; } System.out.println("lastNumber:" + lastNumber); // この文は、エラーになる。 |
では、次のfor文のブロック内で宣言された変数lastNumberはどうだろう。もちろん、ブロック内で使うことは可能だが、for文の外で使うことはできない。次のコードではエラーが起きるはずだ。変数lastNumberが有効な範囲は変数が宣言されたブロック内の残りの部分なのである。
1 2 3 4 |
for (int number = 1; number <= 5; number++) { int lastNumber = number; } System.out.println("lastNumber:" + lastNumber); // この文は、エラーになる |
では、for文のブロックの中で設定された値の変数をfor文の外で使うには、どうすればよいのだろう。その方法は、for文が始まる前で宣言すればよいのだ。
1 2 3 4 5 |
int lastNumber = 0; for (int number = 1; number <= 5; number++) { lastNumber = number; } System.out.println("lastNumber:" + lastNumber); |
このように、for文の前で変数lastNumberを宣言して、for文のブロック内で設定する。こうすれば、for文内の値をfor文の外に持ち出せる。
for文内で宣言された変数のサンプルプログラム
このサンプルプログラムは、for文内で宣言された変数の有効範囲がどこまであるのかを示している。最初は、初期化で宣言された変数lastNumber、次はfor文の繰り返しのブロック内で宣言された変数lastNumberだ。どちらも、for文の繰り返しが終わった後で使うことはできない。使うとエラーになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class VariableDeclarationInInsideOfForStatement { public static void main (String[] args){ for (int number = 1, lastNumber = 0; number <= 5; number++) {//[1] lastNumber = number;//[2] System.out.println("[3] lastNumber:" + lastNumber); } System.out.println("");//[4] // System.out.println("[5] lastNumber:" + lastNumber); // この文は、エラーになる。 for (int number = 1; number <= 5; number++) {//[6] int lastNumber = number;//[7] System.out.println("[8] lastNumber:" + lastNumber); } // System.out.println("[9] lastNumber:" + lastNumber); // この文は、エラーになる。 } } |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
[3] lastNumber:1 [3] lastNumber:2 [3] lastNumber:3 [3] lastNumber:4 [3] lastNumber:5 [8] lastNumber:1 [8] lastNumber:2 [8] lastNumber:3 [8] lastNumber:4 [8] lastNumber:5* |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 変数numberを宣言し、初期値に1を代入する。変数lastNumberを宣言し、初期値に0を代入する。numberを1から10回インクリメントする。
- [2] lastNumberにnumberを代入する。
- [3] numberを表示する
- [4] 改行する。
- [5] numberを表示する
- [6] 変数numberを宣言し、初期値に1を代入する。numberを1から10回インクリメントする。
- [7] 変数lastNumberを宣言し、初期値にnumber を代入する。
- [8] numberを表示する
- [9] numberを表示する
for文の外で宣言された変数のサンプルプログラム
このサンプルプログラムは、for文内で代入された変数の値を、for文の外で使うに方法を示している。
1 2 3 4 5 6 7 8 9 10 |
public class VariableDeclarationInOutsideOfForStatement { public static void main (String[] args){ int lastNumber = 0;//[1] for (int number = 1; number <= 5; number++) {//[2] lastNumber = number;//[3] System.out.println("[4] lastNumber:" + lastNumber); } System.out.println("[5] lastNumber:" + lastNumber); } } |
実行結果
1 2 3 4 5 6 |
[4] lastNumber:1 [4] lastNumber:2 [4] lastNumber:3 [4] lastNumber:4 [4] lastNumber:5 [5] lastNumber:5 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 変数lastNumberを宣言し、初期値に0 を代入する。
- [2] 変数numberを宣言し、初期値に1を代入する。numberを1から10回インクリメントする。
- [3] lastNumberにnumberを代入する。
- [4] numberを表示する
- [5] numberを表示する
まとめ
このページではforのブロック内の変数について詳しく確認してみた。どこでも宣言できるというのは知っておいて損はないだろう。