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

Print Friendly, PDF & Email

ユーチューブ動画

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

ソースコード

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メソッドとも呼びます

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

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

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

これでクラス変数に変わります。

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

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

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

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

これでクラスメソッドになります。

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

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

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

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

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

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

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

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

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

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

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