変数のスコープとは
変数を利用するとデータを保存することが可能です。
変数を利用する際には「宣言」を行う必要がありますが、Javaでは変数の宣言する箇所によって保存したデータを利用できる範囲(スコープ)が変わります。
Javaの変数は宣言する箇所によって「フィールド」「ローカル変数」と呼ばれるスコープの異なる2種類の変数がありますが、第3章までではローカル変数しか利用していないため、ここではローカル変数に絞って説明します。
※スコープのルールはフィールドもローカル変数も変わりません
変数のスコープとローカル変数
前述しましたが、スコープは変数内のデータが利用できる範囲です。具体的にはブロック内({}内)で宣言された変数のデータはブロック内でのみ利用が可能になっています。
上の図のように、変数aはifブロック内で宣言されています。ifブロック内で利用可能で、forはifの中に入っているのでforブロック内でも利用できます。変数iはfor内で宣言されており、forブロックでは利用可能ですが、forブロックの外では利用できません。
以下のプログラムは、6および8行目はスコープがもとでエラーとなります。
1 2 3 4 5 6 7 8 |
if(条件){ int a = 10 ; for(int i = 0; i < 10; i++){ System.out.println(i); } System.out.println(i); } System.out.println(a); |
ローカル変数とはメソッドの中で宣言された変数のことで、今まで(3-8まで)のところmain()メソッド内で変数は宣言しているので、全てローカル変数ということになります。
また、ローカル変数同士はスコープが違っていても同じ変数名を利用するとエラーとなります。
メソッドの外で宣言されている変数のことはフィールドやメンバ変数と呼ばれます。フィールドに関してはオブジェクト指向の章で紹介するため、説明は割愛します。
スコープ 復習問題
- スコープは変数の○で異なる。○に入る語句を選んでください。
- 宣言した○内で変数が利用できる。○に入る語句を選んでください。
- メソッド内で宣言した変数を○変数と呼ぶ。○に入る語句を選んでください。
- メソッド外で宣言した変数を○と呼ぶ。○に入る語句を選んでください。
- 以下のプログラムはどのような結果になるか選んでください。
12345for(int i = 0; i < 10; i++){for(int i = 0; i < 10; i++){System.out.println(i);}} - お疲れ様でした。
-
- 型
- 変数名
- データ
- 宣言
-
- ブロック
- 出力処理
- 変数
- データ
-
- int
- フィールド
- ローカル
- 配列
-
- int
- フィールド
- ローカル
- 配列
-
- コンパイルエラー
- 実行時エラー
- 0から99まで表示される
- 0から99まで10回表示される
まとめ
- 宣言した位置によって変数の利用できる範囲(スコープ)が変わる
- 宣言したブロック{}内で利用ができる
- ローカル変数同士だと、スコープが異なっていても同じ名前は宣言できない