Java static

staticなフィールド

サンプルクラス

class Team{
	int win;
	int lost;
	static int year;
	
	public void show() {
		System.out.println(win + "勝" + lost + "敗");
	}
	
	public static void about() {
		System.out.println("チームを表すクラスです");
	}
}

通常、クラス内で定義されるフィールドは、インスタンスごとに個別の領域を持ちます。インスタンスを生成後に使用可能となります。

TeamMainクラス mainメソッド

	// インスタンス生成
	Team t1 = new Team();
	Team t2 = new Team();
	
	// インスタンス毎のフィールド
	t1.win = 5;
	t2.win = 3;
	System.out.println(t1.win);
	System.out.println(t2.win);

しかし、staticなフィールドはクラスにつき1つしかありません。クラス名.フィールド名 で使用可能です。インスタンスの生成も必要ありません。

TeamMainクラス mainメソッド

	Team.year = 2024;
	System.out.println(Team.year);

主な用途はfinalを付けて定数として使われることが一般的です。定数は書き換えることが無いため、全クラスで1つあれば十分です。なお、定数は全て大文字で記述するのが一般的です。

Teamクラス内

	static final int YEAR = 2024;

staticなメソッド

通常のメソッドはインスタンスを生成してから呼び出す必要があります

TeamMainクラス mainメソッド

	Team t1 = new Team();
	Team t2 = new Team();

	t1.show();
	t2.show();

staticなメソッドはインスタンスを生成せず クラス名.メソッド名 で呼び出せます。

TeamMainクラス mainメソッド

	Team.about();

そのため、staticなメソッドは非staticのフィールド・メソッドにアクセスできません。

Teamクラス内

	public static void about() {
		System.out.println(win); // エラー
		System.out.println(YEAR); // OK
		show(); // エラー
	}

非staticのフィールドを使用しないメソッドではstaticにすることで、インスタンス生成をせず素早く使うことが出来ます。