Java -静的メンバ-
クラスの主なメンバには、メンバ変数メソッドがあります。
これらのメンバにstatic修飾子を付けると静的メンバになり、クラスをインスタンス化しなくても利用できるようになります。
staticの付いたメンバ変数をstatic変数(クラス変数)、staticの付いたメソッドをstaticメソッド(クラスメソッド)といいます。
staticの付かない通常のメンバ変数をインスタンス変数、staticの付かない通常のメソッドのことをインスタンスメソッドといいます。
クラスオブジェクト
プログラムの実行を開始すると、そのプログラムで使用される各クラスに1個ずつ、自動的にオブジェクトが生成されます。
これを
クラスオブジェクトといいます
static変数
同じクラスから生成した複数のインスタンスで共有したい変数や定数にはstatic修飾子を付けます。
これによって、その変数は、static変数となり、インスタンス化する前でも利用することができます。
さらにfinalを付けると定数になります。
static変数は、同じクラスから生成したインスタンスが複数あっても、1つしかありません。
これに対してインスタンス変数は、同じクラスから生成したインスタンスの数と同じ数だけ、それぞれのインスタンス内に存在します。
static変数にアクセスする場合の書式
ただし、インスタンス化した後は、インスタンス変数と同様の記述をしても利用することができます。
クラス名.static変数名
参照型変数.static変数名
※クラスをインスタンス化した場合のみ利用可能。
staticメソッド
staticメソッドは、staticが付いたメソッドです。
このメソッドの内容は、クラスオブジェクトに格納され、インスタンスを生成しなくても利用することができます。
staticメソッドを呼び出す場合の書式
クラス名.staticメソッド名([引数1][,引数2]…)
参照型変数.staticメソッド名([引数1][,引数2]…)
※クラスをインスタンス化した場合のみ利用可能です。
- staticメソッドからインスタンス変数やインスタンスメソッドにアクセスすることはできません。
- インスタンスメソッドからstatic変数やstaticメソッドにアクセスすることは可能です。
- staticメソッド内でthisキーワードやsuperキーワードは利用できません。
静的インポート
importの後ろにstaticキーワードを記述し、静的なメンバを指定するとそのメンバを簡単な名称で記述できるようになります。
import static パッケージ名.クラス名.静的メンバ名;
- 通常のimport文と異なり、クラス名を指定するのではなく、クラス内のメンバ、すなわちstatic変数やstaticメソッド指定します。
- 静的メンバ名の箇所にアスタリスク(*)を指定すると、指定したクラス内のすべての静的メンバを名前だけで記述できるようになります。