第十三章 変数とスコープ
ローカル変数のスコープ
メソッドの中で宣言した変数をローカル変数といいます。
ローカル変数のスコープはメソッドの中だけです。
目次
1.ローカル変数とは
メソッドの中で宣言した変数を「ローカル変数」といいます。
これに対して、メソッドの外(classの中)で宣言した変数を「メンバ変数」といいます。
ここまで使ってきた変数は
すべてローカル変数だ。
mainメソッドや、別に作ったメソッドの中
だったからな。
なるほど。
このページではローカル変数のスコープを
説明をしていきたい。
2.スコープとは
変数には有効範囲があって、その範囲の外から変数を参照することはできません。
この変数の有効範囲をスコープといいます。
スコープは、変数を宣言した場所で決定します。
宣言したあとで、変数のスコープを変更することはできません。
3.ローカル変数のスコープ
ローカル変数のスコープ
変数が宣言された場所から「 }」(閉じ波カッコ)までがスコープです。
//Sample08_001.java
class Sample08_001{
public static void main(String[] args){
int value = 100;
value *= 1.1;
System.out.println("value * 1.1= " + value);
}//スコープはここまで。
}
コマンドライン
>javac Sample08_001.java
>java Sample08_001
value * 1.1= 110
範囲が決まってたんですね。
mainメソッドだけ扱っている間は
「宣言以降がスコープ」で良かったが、
他のメソッドも使うようになったから
スコープを気にしなければならなくなった。
「 }」(閉じ波カッコ)が目印ね。
↓の Sample08_002NGは、変数 valueを method_01で宣言しました。
つまり、value は method_01のローカル変数ということになります。
この為、valueのスコープは method_01内に限られます。
他のメソッド(例えばmainメソッド)からは参照できません。
//Sample08_002NG.java
class Sample08_002NG{
static void method_01(){
int value = 100;
value *= 1.1;
}//スコープはここまで。
public static void main(String[] args){
System.out.println("value * 1.1= " + value);
}
}
コマンドライン
>javac Sample08_002NG.java
Sample08_002NG.java:9: エラー: シンボルを見つけられません
System.out.println("value * 1.1= " + value);
^
シンボル: 変数 value
場所: クラス Sample08_002NG
エラー1個
エラーになってしまいました。
mainメソッドの中から参照できる範囲に「value」が見つからなかったのです。
あれ?
メソッドの結果を
mainメソッドに渡すのって
どうすればいいんスか?
戻り値を利用するといい。
ここで引数と戻り値かぁ!
4.ローカル変数の値の受け渡し
↓の Sample08_003では、int変数 valueを method_02の引数として宣言しました。
この valueは、method_02のローカル変数として扱われます。
valueのスコープは method_02内に限られます。
valueの値を mainメソッドに返すためには、method_02の戻り値を利用します。
メソッドの引数はそのメソッドのローカル変数です。
↓の例では method_02メソッドの value は
ローカル変数になる。
//Sample08_003.java
class Sample08_003{
static int method_02(int value){//valueは、method_02のローカル変数
value *= 1.1;
return value;
}//スコープはここまで。
public static void main(String[] args){
int arg = 100;
int anser = method_02(arg);
System.out.println(arg + " * 1.1= " + anser);
}//スコープはここまで。
}
コマンドライン
>javac Sample08_003.java
>java Sample08_003
100 * 1.1= 110
class Sample08_003の解説
- 初めに mainメソッドが実行されます。
- method_02メソッドに、引数 argを与えています。
- 引数 argの値は、method_02の変数 valueに代入されます。
- method_02で、valueの値は1.1倍になって、returnによって mainメソッドに返されます。
- 同時に mainメソッドでは、戻り値を変数 anserで受け取ります。
- 最後に anserの値を表示しました。
mainメソッドからmethod_02の中の変数にアクセスすることは一切できません。
引数を与えて、戻り値を得るだけです。
ローカル変数の値の受け渡し
ローカル変数のスコープは、宣言したメソッドの中に限られます。
他のメソッドへの受け渡しには、メソッドの引数と戻り値を利用します。
ローカル変数のスコープは
あえて限定されている。
プログラマにとってその方が都合がいいからだ。
どうゆうこと?
変数名の重複や取り違えによるトラブルを
避けているんだ。
ふ~ん。
もう少し説明を続けますね。
お疲れ様でした。