HOME > staticメソッド/static変数/staticイニシャライザ

staticメソッド/static変数/staticイニシャライザ

メソッドやメンバ変数にstatic修飾子を付けると、staticメソッド、static変数になります。
static修飾子を付けると何が変わるかというと、newしなくてもそのメソッドやメンバ変数にアクセスできるようになります。

ちなみに、staticなメソッドや変数のことを、静的メソッド、静的変数 などと言ったりします。


例を見てみましょう。

サンプルソース

まずは通常版です。(InstanceSample.java)

例)通常メソッド、メンバ変数のサンプル

InstanceSample.java
public class InstanceSample {

    //通常メンバ変数
    public String val = "hoge";

    //通常メソッド
    public int add(int a, int b){
        return a + b;
    }
}


次にstatic版です。(StaticSample.java) (上のサンプルにstaticが付いただけです。)

例)staticメソッド、staticメンバ変数のサンプル

StaticSample.java
public class StaticSample {

    //staticメンバ変数
    public static String val = "hoge";

    //staticメソッド
    public static int add(int a, int b){
        return a + b;
    }
}



通常版を呼び出す時は、インスタンス化(new)してから呼び出します。

InstanceSample呼出
InstanceSample sample = new InstanceSample();
String a = sample.val;
int b = sample.add(10, 20);

※メンバー変数に直接アクセスするのはあまりよろしくないですがご了承ください。(^^ゞ


しかしstatic版を呼び出す時は、クラス名から直接呼び出すことができます。

StaticSample呼出
String a = StaticSample.val;
int b = StaticSample.add(10, 20);


staticメソッドや変数は、複数のところから呼ばれた場合は全ておなじ場所(メモリ)が参照されることになるので、ある所で変数の値を変更されたら他に参照しているところ全てに影響が出ることになります。

用途としては、以下のような場合に便利です

・共通関数を定義する場合
・共通定数を定義する場合
・複数クラス間で共通の値を共有したい場合

staticイニシャライザ

クラスにはstaticイニシャライザというものを定義することができます。
staticイニシャライザはクラスがロードされたタイミングで実行されるブロックで、コンストラクタやmainメソッドよりも先に呼ばれます。

例)staticイニシャライザのサンプル

Sample.java
public class Sample {

    //staticイニシャライザ
    static{
        System.out.println("staticイニシャライザが呼ばれました。");
    }

    //main
    public static void main(String args[]) {
        System.out.println("maimメソッドが呼ばれました。");
    }
}

実行結果

コマンドプロンプト
C:\>java Sample staticイニシャライザが呼ばれました。 maimメソッドが呼ばれました。