変数の範囲


変数のスコープ

クラスを作成してから、少しあやふやな変数の有効範囲についてまとめましょう
ひとこと変数といっても、変数には数種類あることがわかります

一つは、オブジェクトと結びつくインスタンスメンバ変数です
この変数はオブジェクトなしには生成されず、インスタンスが作成されてはじめて存在します
class class_name {
	int member;
}
次に、静的メンバ変数です
これも説明不要でしょうが、クラスに直接結びついた変数ですね
同一クラス内の場合は変数名だけでアクセスすることもできます
C言語などのグローバル変数がこれにあたります
class class_name {
	static int member;
}
もう一つはメソッド内で宣言されたローカル変数です
ローカル変数はメソッドが処理を終了した時点でメモリから破棄されます
そのため、ローカル変数は完全な使い捨てになります
class class_name {
	public function() {
		int member;
	}
}
メンバ変数名とローカル変数名が同じ場合、ローカル変数が優先されます
そのような場合はthisキーワードを使用するのでした

さて、これまでが私たちが使ってきた変数です
これらのような、ある変数に直接アクセスできる範囲を変数のスコープと呼びます
これまでの関係を見ると、JAVA言語は { } が変数のスコープであることがわかります

クラスやメソッドでの宣言以外にコードブロックでの宣言も可能です
コードブロックの使用は主にforやwhileやifなどの制御文が一般的です
ループ処理時に一時的に変数を使用したい場合などには便利です
何より、コードブロックを抜けた時点でメモリから破棄されるので、メモリの有効利用といえます
class test {
	public static void main(String args[]) {
		int count;
		for (count = 0 ; ; count++) {
			int var = 10;
			System.out.println("forループ内 = " + var);
			break;
		}
		int var = 100;
		System.out.println("forループ終了時 = " + var);
	}
}
forループのコードブロックの先頭に変数の宣言がありますね
この変数 var はforを抜けた時点でメモリから破棄されています
そのため、main()メソッドで再度宣言してもエラーは発生しません




前のページへ戻る次のページへ