インスタンス変数

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

インスタンス変数instance variable)とは、Smalltalk等のオブジェクト指向言語において、オブジェクトインスタンスごとに割り当てられた変数のことである。フィールドfield)、データメンバdata member)、メンバ変数member variable)とも呼ばれる。それに対してクラス変数は、同じクラスに対する全てのインスタンスが同じ値を共有する。

インスタンス変数は、インスタンスフィールドinstance field)あるいは、略して「フィールド」と呼ぶこともある(本来、この「フィールド」の意味には、「クラス変数」も含まれるが、インスタンス変数のプログラミング言語によってはインスタンス変数のことを「フィールド」と呼び、クラス変数とは名前を区別しているものもある)。UMLではインスタンス変数のことを属性attribute)とも呼ぶ。

1:class Foo{
2: String bar;
3: static String baz;
4:}

上記の例において、barはクラスFooのインスタンス変数である。それに対して、bazはクラス変数である。 以下のプログラムで、Fooクラスを用いて クラス変数インスタンス変数の違いを示す。

プログラム例

 1:class TestFoo{
 2: public static void main(String [] args){
 3:  Foo foo1 = new Foo();
 4:  Foo foo2 = new Foo();
 5:  foo1.bar = "foo1.bar"; //foo1.bar(インスタンス変数)に"foo1.bar"を代入
 6:  foo1.baz = "foo1.baz"; //foo1.baz(クラス変数)に"foo1.baz"を代入
 7:  foo2.bar = "foo2.bar"; //foo2.bar(インスタンス変数)に"foo2.bar"を代入
 8:  foo2.baz = "foo2.baz"; //foo2.baz(クラス変数)に"foo2.baz"を代入
 9:  System.out.println("foo1.bar=" + foo1.bar + "foo1.baz=" + foo1.baz);
10:  System.out.println("foo2.bar=" + foo2.bar + "foo2.baz=" + foo2.baz);
11: }
12:}

実行結果

foo1.bar=foo1.bar foo1.baz=foo2.baz
foo2.bar=foo2.bar foo2.baz=foo2.baz

上記のプログラムにおいて、foo1.bazとfoo2.bazはFooクラスのクラス変数を表している。 つまり、foo1.bazとfoo2.bazが表しているインスタンスは同一である。 そのため、結果として出力されるfoo1.bazとfoo2.bazの値は同じとなる。 逆に、foo1.barとfoo2.barはインスタンス変数であり、独立した変数である。 そのため、結果として出力されるfoo1.barとfoo2.barは異なった値となる。

関連項目[編集]