028-オブジェクト指向の基本-クラス変数とstaticメソッド【新人エンジニアが最初に覚えたい100のJava文法】

ユーチューブ動画

static変数とstaticメソッドについて解説します。

ソースコード

public class BasicClass {
	public static void main(String[] args) {
		Product product1 = new Product("pencil",100);
		Product product2 = new Product("eraser",60);
		System.out.println(Product.getProductCount());
	}
}
class Product {
	private String productName;
	private int price;
	private static int count = 0;
	public Product(String productName, int price) {
		this.productName = productName;
		this.price = price;
		count++;
	}
	public static int getProductCount(){
		return count;
	}
}

解説

static変数とstaticメソッドについて解説します。

複数のインスタンスを作成することに慣れてきましたか?

複数のインスタンスに共通する処理を書くためには、どうしたらよいでしょうか?

たとえば、何個インスタンスを作成したのか数えるためにはどうしたらよいでしょうか?

そこで登場するのがstatic変数やstaticメソッドです。

static変数やstaticメソッドとも呼びます

static変数やstaticメソッドを定義すると、インスタンスに共通する処理を記述することができます。

サンプルコードを確認しましょう。

メンバ変数の下にcountという変数が宣言されていますが、こちらにstaticという指定があります。

これでstatic変数に変わります。

コンストラクタに注目してください。

コンストラクタの中で、変数countがインクリメントしています。

すると、コンストラクタが呼び出されるたびにstatic変数が1ずつ増えることになります。

次のgetProductCountメソッドに注目していください。こちらもstaticという指定になっています。

これでstaticメソッドになります。

staticを指定すると、インスタンスを作成してなくてもアクセスすることができます

呼び出し側を確認しましょう。Productクラスのインスタンスが2つ作成されています。

この段階で、2回コンストラクタが呼び出されています。変数countが1ずつ増えることになります。

この変数countは、2つのコンストラクタに共通する領域になっていることを忘れないでください。

すると、2個目のインスタンスが出来たときには、変数countは2になっています。

staticメソッドにアクセスする際は、クラス名.メソッド名で簡単にアクセスできます。

getProductCountメソッドでは、countを返しますので、結果は2と表示されます。

static変数やstaticメソッドは便利である一方、きちんと管理しないと思わぬバグを生み出す原因になります。

使うときには限定的にしておきましょう。

以上、static変数とstaticメソッドについて解説しました。

このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。