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メソッドが呼ばれました。