【Java】static修飾子

2018年3月11日

本稿では、static修飾子について説明します。

static変数とstaticメソッドは、設計図(クラス)事態に含めることができる値やメソッドです。

実際の物体ができていなくても設計図にデータが存在するのでいつでもアクセスできます。

そのかわり、new ~と宣言しても新しいオブジェクト内にstaticデータは生成されません。staticはそのクラスに一つだけ存在する要素なのです。

static変数とstaticメソッドの使用

使用方法は
class クラス名{
static 型名 変数名;

static 戻り値 メソッド名(引数){
}
}
です。

アクセスしたい場合は、「クラス型.変数名」、「クラス型.メソッド名(引数)」などと定義しましょう。

また、「変数名.変数名」、「変数名.メソッド名(引数)」などと定義してもアクセスできます。

それではサンプルをご覧ください。

public class Test{
	public static void main(String[] args){
		Chara.name = "ソレガシ";
		Chara.print();
		
		Chara ch = new Chara();
		ch.name = "変更してみる";
		
		Chara.print();
		ch.print();
	}

}
class Chara{
	static String name;
	
	static void print(){
		System.out.println("私は"+name+"です。");
	}
}
実行結果

私はソレガシです。
私は変更してみるです。
私は変更してみるです。

クラスオブジェクトから呼び出そうと、クラス名.変数名などと呼び出しても値の変更は可能で、どこからアクセスしても同じ値だということがわかるかと思います。

staticメソッドを利用する時はstatic変数やstaticメソッドにしかアクセスできません。

エラーが出るか見ておきましょう。

public class Test{
	public static void main(String[] args){
		Chara.name = "ソレガシ";
	}
}
class Chara{
	static String name;
	int hp;	
	static void print(){
		System.out.println("私のhpは"+hp+"です。");
	}
}
コンパイル結果

Test.java:13: エラー: staticでない変数 hpをstaticコンテキストから参照することは
できません
System.out.println(“私のhpは”+hp+”です。”);
^
エラー1個

staticイニシャライザ

static変数を初期化したい場合は、staticイニシャライザが使えます。

クラスの内部に

static{
}

と定義するだけです。

呼び出しタイミングは初めてクラスが利用された時等です。

自分で利用するタイミングでは必ず呼び出されていると思ってもらって構いません。

public class Test {
	public static void main(String[] args){
		System.out.println(Latifa.num);
	}
}
class Latifa{
	static int num;
	static{
		num= 300;
		System.out.println("スタティックイニシャライザの呼び出し");
	}
}
実行結果

スタティックイニシャライザの呼び出し
300

Java

Posted by nompor