トップ 言語 Java アクセス修飾子、スコープ、定数 Javaのstatic修飾子

Javaのstatic修飾子―static変数、メソッド、イニシャライザ、インポートなど

static変数、staticメソッド、staticイニシャライザ、staticインポートなど。Javaのstatic修飾子についてまとめています。

Javaのstatic修飾子

static修飾子は、フィールドやメソッド、クラスをインスタンス化しないで利用したい場合に指定します。

static修飾子が付いた変数やメソッドは、クラス変数、クラスメソッドと呼ばれ、プログラム内で共有されます。 オブジェクト間で共通の値を保持したい場合などに使用します。

Javaのstatic修飾子についてまとめると以下のようになります。

Javaのstaticメソッドとstatic変数

static修飾子は、変数およびメソッドに使用されます。

static変数

インスタンス変数はオブジェクトが作成されるときに初期化されるのに対して、 static変数はクラスのロード時に初期化されます。 また、static変数はインスタンス変数とは異なり、各オブジェクトごとに用意されるのではなく、クラスに対して1つだけ用意されます。

あるクラスをもとに複数のオブジェクトを生成している場合は、オブジェクト間で、同じstatic変数を共有して使用することになります。 このようにインスタンス化されたオブジェクト経由であっても同じstatic変数にアクセスすることになるため、 static変数は 参照変数名.static変数名 のアクセスだけではなく、クラス名.static変数名 でアクセスすることが出来ます。

staticメソッド

static変数と同じく、staticメソッドもクラスにおける特定のオブジェクトではなく、定義もとに属しています。 したがって、staticメソッドは、クラスのstaticメンバにしかアクセスできず、クラス内で定義されているstaticメソッドは、クラスの非static変数およびメソッドにはアクセスできません。 なお、staticメソッドは、クラス名.メソッド名( )で呼び出しが出来るため、インスタンス化しなくても利用可能です。

staticイニシャライザとstaticインポート

その他にstaticキーワードを使用したトピックとして、staticイニシャライザとstaticインポートがありますので、以下で見ていきます。

staticイニシャライザ

staticイニシャライザは、クラスファイルがロードされたタイミングで1度だけ実行されるブロックです。 クラスをインスタンス化する前や、main()メソッドを呼び出す前に実行したい処理に使用します。

staticイニシャライザは、以下のように記述します。

class Sample {
    static {
        // staticイニシャライザの処理
    }
        :
}

なお、インスタンス変数を初期化したり、コンストラクタで共有したい場合に使える、staticが付かないイニシャライザというものもあります。

class Sample {
    {
        // イニシャライザの処理
    }
        :
}

staticインポート

staticインポートは、static変数やstaticメソッドをクラス名を指定しないで利用できるようにする機能です。 import staticキーワードを使用します。

staticインポートは、例えば以下の「import static org.junit.Assert.*;」ようにjunitのAsert.xxxメソッドを使用したい時などに使用します。

import static org.junit.Assert.*;

import org.junit.Test;

import com.zealseeds.Sample;

public class SampleTest {

    @Test
    public void test_コンストラクタ() {
        Sample sample = new Sample();
        assertNotNull(sample);
    }
    :
}

上記の例では、assertNotNullだけ記述してAssert.assertNotNullメソッドが実行できる例となっています。

もっと知識を広げるための参考

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Bcc /Eclipse /gcc /gdb /g++ /JDK /JUnit /ZAP

技術・仕様
Ajax /CORBA /Java EE(旧称J2EE) /JNI

ライブラリ/Framework/CMS
jQuery /Lucene /MyBatis /RESTEasy /Spring /Struts /Seasar2 /WordPress

ITインフラ OSとミドルウェア
Linux /Windows /シェル
Apache/Tomcat /MySQL /Redis /Solr /vsftpd

ITインフラ PC 製品
ZOTAC

ITインフラ サーバー
Web公開サーバー構築

ITインフラ ネットワーク
プログラミング /機器 /構築

ITインフラ セキュリティ
公開サーバーのセキュリティ

SI
ホームページの作り方 /小さな会社のISMS

その他
IT用語 /ITスキル体系 /トレンド履歴

スポンサーリンク