静的メンバとインスタンスメンバ




メンバ (クラスのメンバ)


クラスを構成する変数やメソッド


静的メンバとインスタンスメンバ


 静的メンバは、クラスに結び付けられたメンバであり、インスタンスメンバは、クラス宣言をテンプレートとして生成 されたインスタンスに結び付けられたメンバである。
 静的メンバは、そのクラスより生成されたすべてのインスタンスにより共有される。静的メンバの宣言には 修飾子 static を用いる。

静的変数の宣言:
      static 型名 変数名

静的メンバの例

01  class C {
02     static int s = 0;    // 静的変数sの宣言
03     int n = 0;           // インスタンス変数nの宣言
04     public void countUp() {
05        s++;
06        n++;
07     }
08     public void show() {
09        System.out.println("s= "+s+" \tn= "+n);
10  }
11
12  class Example3 {
13     public static void main(String[] args) {
14        C a = new C();
15        System.out.println("a");
16        a.show();
17        a.countUp();
18        a.show();
19        a.countUp();
20        a.show();
21        C b = a;
22        System.out.println("b");
23        b.show();
24        C c = new C();
25        System.out.println("c");
26        c.show();
27        c.countUp();
28        c.show();
29        System.out.println("a");
30        a.show();
31        System.out.println("s="+C.s+",\t"+a.s);
32     }
33  }


02行     静的変数s
04〜07行  インスタンスメソッド countUp()
s、nの値をそれぞれ1つ増す:
s ← s+1,   n ← n+1
14〜16行
第14行でクラスCのインスタンスが生成され、第16行ではs=0, n=0と表示される。
17〜18行
a.countUp()を呼んだ後では、sとnの値が1つ大きくなる。(s=1, n=1)
19〜20行
前の2行と同様にs, n の値が、それぞれ、1つ増加す。(s=2, n=2)
21〜23行
第21行では変数bはa同じオブジェクトを参照している。したがって、第23行ではb のa, nの値はaと同じである。(s=2, n=2)
24〜26行
第24行でクラスCのインスタンスを生成し、26行で変数値を表示すると、sは静的変 数であるから、オブジェクトa, b でのsと同じ値となるが、nはインスタンス変数であるからc独自の初期化された値となる。(s=2,  n=0)
27〜28行
s, n の値は1つ増す。(s=3, n=1)
29〜30行
sは静的変数であるから、オブジェクトcとオブジェクトaで同じである。nはインスタ ンス変数であるから20行での値から変化はない。(s=3, n=2)
31行
静的変数sは、C.s, a.s, b.s, c.s により参照できる。

static member