static変数とstaticメソッド

static メソッド、static 変数とは何か。
staticの概念と動作について記載します。

staticは、「インスタンス化」の動作を理解した上で、staticの動作を知るほうが理解が深まるかと思います。

このことについて説明した上で、staticの動作を説明したいと思います。

サンプルクラス

都合上、以下のクラスを例に説明します。

public class InstanceA {
//メンバ変数
private String name = "";
//static変数
private static String value = "AAA";

//staticメソッド
public static String getValue() {
return value + "!!!";
}

//メンバメソッド
public String getName() {
return name;
}

//メンバメソッド
public void setName(String name) {
this.name = name;
}
}

インスタンス化

インスタンス化とは、クラスの情報をメモリ上に展開し、クラスを利用できるようにすることです。

以下のように”new”することが、インスタンス化といえます。

Customer instance1 = new Customer();
Customer instance2 = new Customer();

インスタンス化する場合の、メモリ上でどのように扱われているかを図で表しています。

“new”するごとにメモリ上にクラスの情報が展開するため、インスタンス化することは「動的」と表現されます。

static変数、staticメソッドの動作

“new”のインスタンス化が「動的」であったことに対して、staticは「静的」といえます。

static変数は、JVM起動時にロードされる、メモリ上のクラスの領域に保存します。
※図のグレーの部分。インスタンスごとに保持するメソッドや変数ではありません。

そのため、staticメソッドやstatic変数は、JVM内に存在する1つだけのクラスの情報に保持する情報です。
“new”をせず、アクセスすることができるのは、このためです。

[staticメソッドへのアクセス例]

InstanceA.getValue();

staticを利用する利点

staticな変数やメソッドはインスタンス化せずに利用でることが利点といえます。

・static変数
クラスで共通した値を保持できる

・staticメソッド
インスタンスの状態によって影響を与えない処理をしたい場合は、staticメソッドにすることでインスタンス化することなく利用できるメソッドとして定義します。
(インスタンス化するとメモリを使用することになるので、適宜staticを利用することで不要なメモリを使うことがなくなりますよね。)

例えば、以下のような処理を扱うUtilityクラスがこれにあたります。
・年月日の形式を変更する処理
・計算処理
などなど。。

※基本、業務システムでも上記のような処理は、Utilityクラスを作成してstaticメソッドで定義します。

最後に

staticを利用することは、メモリ使用量の削減にもつながります。
staticを有効に使い分け、無駄なメモリを使用することがないよう、クラス設計すること心がけましょう。


にほんブログ村 IT技術ブログ Javaへ

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です