コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「インスタンス変数」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m 曖昧さ回避ページプログラムへのリンクを解消、リンク先をプログラム (コンピュータ)に変更(DisamAssist使用)
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
 
4行目: 4行目:


[[Java]]のクラスを用いた例を示す。
[[Java]]のクラスを用いた例を示す。
<source lang="java">
<syntaxhighlight lang="java">
class Foo {
class Foo {
String bar;
String bar;
static String baz;
static String baz;
}
}
</syntaxhighlight>
</source>


上記の例において、barはクラスFooの'''インスタンス変数'''である。それに対して、bazは[[クラス変数]]である。
上記の例において、barはクラスFooの'''インスタンス変数'''である。それに対して、bazは[[クラス変数]]である。
15行目: 15行目:


プログラム例:
プログラム例:
<source lang="java">
<syntaxhighlight lang="java">
class TestFoo {
class TestFoo {
public static void main(String [] args) {
public static void main(String [] args) {
28行目: 28行目:
}
}
}
}
</syntaxhighlight>
</source>


実行結果:
実行結果:

2020年7月5日 (日) 22:48時点における最新版

インスタンス変数 (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);
  }
}

実行結果:

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は異なった値となる。

関連項目

[編集]