Accel Works
Accel Works  >  Developer  >  Java入門 (基礎文法編)

Java入門 (基礎文法編) 第14章:メンバ変数
前へ     次へ     Developerへ     Accel Worksへ

今回は、変数についての説明です。

変数の型についてはすでに説明済みですが、今回は変数の種類についてです。

変数はメンバ変数と、ローカル変数があります。

まずはなじみのあるローカル変数から説明します。
ローカル変数はメソッド内で使用する変数のことです。
ほかのメソッドからはアクセスすることができません。
前回のサンプルを思い出してください。
class MethodTest{
	public static void main(String[] args){

		String name;
		String maker;

		//getNameメソッドを呼ぶ
		name = getName();
		//getMakerメソッドを呼ぶ
		maker = getMaker();

		//showMessageメソッドを呼ぶ
		showMessage(maker,name);

	}

	//名前を取得するメソッドです。
	public static String getName(){
		String name = "スカイライン";

		return name;
	}
}
ちょっと省略してありますが、このサンプルではmainというメソッドとgetNameというメソッドがあります。
それぞれのメソッドの中で使用されている変数がローカル変数です。

mainメソッドではnamemakerというローカル変数が使用されています。
getNameメソッドではnameというローカル変数が使用されています。

nameという名前のローカル変数はmain、getNameのどちらでも使用されていますが、別物として扱われます。

次にメンバ変数です。
メンバ変数はローカル変数と違い、クラス内であればどこからでも参照することができます。
また、メソッドのように修飾子をつけることで、変数を参照できる範囲を指定することもできます。
修飾子の意味はメソッドのときと同じです。
  • publicと指定すると、そのメンバ変数はどこからでも参照できます。
  • protectedと指定すると、そのメンバ変数はそのクラスを継承したサブクラスからしか参照できません。
  • 修飾子を省略すると、そのメンバ変数は同じパッケージのクラスからしか参照できません。
  • privateと指定すると、そのメンバ変数はそのクラスの中からしか参照できません。
メンバ変数は、クラスの中でメソッドの外に宣言します。
class MemVariTest{
	//メンバ変数を宣言
	private static int cnt;

	public static void main(String[] args){
		addCnt();
		showCnt();
		addCnt();
		showCnt();

	}

	public static void addCnt(){
		//cntに10を足します
		cnt += 10;
	}
	
	public static void showCnt(){
		//cntを表示します
		System.out.println(cnt);
	}
}
一番上でメンバ変数を宣言しています。
private static int cnt;
privateですのでこのクラスからしか使用することはできません。

addCntメソッドでこのメンバ変数を+10しています。
showCntメソッドでこのメンバ変数を表示しています。
メソッド間で共通に参照できていることが分かりますよね。

ところで、ちょっと勘のいい人ですと
「このcnt変数は初期化されていないけど大丈夫かな?」
と考えるかもしれません。

メンバ変数の場合、暗黙で初期化がされます。
intなどの整数型は0が初期値で入ります。
doubleなどの浮動小数点型は0.0が初期値で入ります。
char型は空文字列が初期値で入ります。
boolean型はfalseが初期値で入ります。
Stringなどのクラスの場合はnullが初期値で入ります。

本当は明示的に初期化をしたほうが無難ですね。
private static int cnt = 0;
などとしておきましょう。

前へ     次へ     Developerへ     Accel Worksへ

この記事に対するご意見・ご要望は掲示板にお願いします。

投稿記事募集中
Accel Worksでは投稿記事を募集しています。
皆さんの得意分野、経験、体験を生かして記事を書いてみませんか?
投稿記事募集

(C)CopyRight 2007 Accel Works All Rights Reserved
無断転載は禁止です。