通常、クラスからインスタンスを複数作ると、クラスに含まれる変数の実体も複数作成されます。静的変数とはそのクラスにひとつだけ存在する変数です。 インスタンスを複数作っても、静的変数はひとつだけとなります。 また、静的変数はインスタンス化しなくても使用することができます。 変数を静的変数とするには、変数宣言の前に static を付けます。

静的メソッドはクラスをインスタンス化しなくても呼び出すことのできるメソッドです。 静的でないメソッドはクラスをインスタンス化しないと呼び出すことはできません。 メソッドを静的メソッドとするには、メソッド宣言の前に static を付けます。

静的メソッドには次の制限があります。

静的メソッドはインスタンス化されずに呼び出されることがあるので、インスタンス化されないと領域が確保されないインスタンス変数を参照することができません。

class MyClass {
  static boolean staticVariable;
  boolean instanceVariable;

  static void MyFunc() {
    staticVariable = true;

    // staticでない変数は参照できない
    // instanceVariable = true;
  }
}

静的初期化ブロック

静的初期化ブロックとは、クラスのロード時に一度だけ実行されるコードブロックである。次のようにstatic修飾子を付けたブロックで表現する。

static { statements }

静的初期化ブロックの使用例を次に示す。

package com.fc2web.itref;

import java.util.Random;

class Foo {
  static int bar;

  static {
    Random r = new Random();
    bar = r.nextInt(100);
  }

  public int getBar() {
    return bar;
  }
}