Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのstaticメソッドとは?|メソッドの呼び出し方も紹介!

2020年10月21日
SE
staticメソッドって何ですか?
PM
staticメソッドはインスタンス化による影響を受けない処理をするメソッドのことを言います。

staticメソッドとは?

Javaではメソッドの定義をする際に、static修飾子をつけない非staticメソッドと、static修飾子をつけたstaticメソッドがあります。

Javaにおいて通常メソッドは、クラスをインスタンス化してから使用します。しかし、static修飾子を付与したメソッドは、クラスのインスタンス化なしに直接呼び出して使用します。

いくらインスタンスを生成しても、参照先の実体は1つだけ確保された状態ということです。実際のコードを掲載しているので、照らし合わせてみてください。

定義方法

Javaのstaticメソッドの定義方法は、通常のメソッドの戻り値のデータ型定義の前にstatic修飾子をつけます。

呼び出し方

Javaのstaticメソッドの呼び出し方は、クラス名.メソッド名()とします。前述のStaticSampleクラスを例にすると以下のようになります。

Javaを初めて学ぶ際に覚えるmainメソッドの、public static void main(String[] args)もstatic修飾子を付与しています。ちなみにstatic修飾子は、メソッド以外にもメンバ変数や内部クラスやimportにも付与可能です。

またstatic initializserなどもあります。今回はメソッドに対するstaticについて説明しますので、気になった方は調べてみてください。

特徴

ここまで、Javaのstaticメソッドの定義方法と呼び出し方を見てきました。次に、staticメソッドの特徴を説明します。は3つの特徴を取り上げているので、順に説明していきます。

Javaをこれから勉強する人はもちろん、すでに学習したことがある人も復習として、ぜひこの記事を参考にしてください。

参照先の実体は1つ

Javaでは、クラスに定義した変数やメソッドはインスタンス化した際に、メモリ空間にその領域が確保されます。上記のコードサンプルの、StaticSampleクラスを少し修正して説明します。

上記のsample_1のmethod_none()と、sample_2のmethod_none()は別のメモリ空間で処理されます。

しかし、StaticSample.method_static()は同じメモリ空間で処理されるため、staticCallCountの値が保持されたまま処理されます。具体的な実行結果は、以下のようになります。

static修飾子なしの出力は、2回目も「呼び出し回数:0」ですが、static修飾子ありの出力は、「呼び出し回数:0」と「呼び出し回数:1」という違いがあります。

staticメソッド内での参照制限

staticメソッド内で参照できるメンバ変数とメンバメソッドには、以下のような違いがあります。

staticメソッド内からstatic変数やstaticメソッドは参照できるが、非static変数や非staticメソッドは参照できず、上記のソースでコメントアウトを解除するとJavaのコンパイル時にエラーとなります。

オーバーライドできない

staticメソッドはオーバーライドできません。StaticSampleクラスを親クラスに持つ、StaticSampleChildクラスを作成している前提でコードを見ていきましょう。

このようにstaticメソッドをオーバーライドしようとしてもできません。これは、staticメソッドがクラス固有であることを保証するためです。このような場合には別のメソッド名にするか、そもそものクラス設計を見直す方が良いでしょう。

SE
メソッドのクラスを使うことで、さまざまな呼び出し方ができるのですね。
PM
実際に使ってみて、自由にstaticメソッドを使えるようになりましょう。

Javaのstaticメソッドを使ってみよう

この記事では、Javaのstaticメソッドの使い方を見てきました。非staticメソッドとの違いや使い方がわかったでしょうか。

実際に自身の手を動かしてコーディングしてみてください。そしてstatic修飾子の利用シーンを増やして自由に使えるようにしていきましょう。


Java分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)