インスタンス変数
(インスタンスフィールドから転送)
インスタンス変数 (instance variable) とは、Smalltalk等のオブジェクト指向言語において、オブジェクトのインスタンスごとに割り当てられた変数のことである。フィールド (field)、データメンバ (data member)、メンバ変数 (member variable) とも呼ばれる。それに対してクラス変数は、同じクラスに対する全てのインスタンスが同じ値を共有する。
インスタンス変数は、インスタンスフィールド (instance field) あるいは、略して﹁フィールド﹂と呼ぶこともある (本来、この﹁フィールド﹂の意味には、﹁クラス変数﹂も含まれるが、プログラミング言語によってはインスタンス変数のことを﹁フィールド﹂と呼び、クラス変数とは名前を区別しているもの[要説明]もある)。UMLではインスタンス変数のことを属性 (attribute) とも呼ぶ。
Javaのクラスを用いた例を示す。
class Foo {
String bar;
static String baz;
}
上記の例において、barはクラスFooのインスタンス変数である。それに対して、bazはクラス変数である。
以下のプログラムで、Fooクラスを用いてクラス変数とインスタンス変数の違いを示す。
プログラム例:
class TestFoo {
public static void main(String [] args) {
Foo foo1 = new Foo();
Foo foo2 = new Foo();
foo1.bar = "foo1.bar"; // foo1.bar (インスタンス変数) に"foo1.bar"を代入
foo1.baz = "foo1.baz"; // foo1.baz (クラス変数) に"foo1.baz"を代入
foo2.bar = "foo2.bar"; // foo2.bar (インスタンス変数) に"foo2.bar"を代入
foo2.baz = "foo2.baz"; // foo2.baz (クラス変数) に"foo2.baz"を代入
System.out.println("foo1.bar=" + foo1.bar + " foo1.baz=" + foo1.baz);
System.out.println("foo2.bar=" + foo2.bar + " foo2.baz=" + foo2.baz);
}
}