「クラス変数」の版間の差分

編集の要約なし
(→‎Ruby: クラスインスタンス変数についての注記)
編集の要約なし
'''クラス変数''' ({{Lang|en|class variable}}) または、'''静的メンバ変数''' ({{lang|en|static member variable}})、'''静的フィールド''' ({{Lang|en|static field}}) とは、同一[[クラス (コンピュータ)|クラス]]・[[サブクラス (計算機科学)|派生クラス]]で共有される[[変数 (プログラミング)|変数]]である。そのため、関連クラスに渡って共通に使用できる[[グローバル変数]](大域変数)であるともいえる。
 
これに対して、インスタンスごとに確保される変数のことを、[[インスタンス変数]]あるいは単に[[フィールド (計算機科学)]]、[[データメンバ]]、[[メンバ変数]]などと呼ぶ。
 
[[統一モデリング言語|UML]]ではクラス変数のことを、特別な意味を持つ'''[[属性]]'''として'''クラススコープ''' ({{Lang|en|class scope}}) と呼ぶ。
== Ruby ==
本節では[[スクリプト言語]]である[[Ruby]]でクラス変数の概略を記す。Rubyにおいては、@@で始まる変数がクラス変数となる。
本節では、[[Java]]におけるクラス変数の例を記す。
 
Javaにおいては、static修飾子を使うことでクラス変数を宣言できる。下記の例において、2行目で宣言されているfooはクラス変数であり、3行目で宣言されているvarは[[インスタンス変数]]である。冒頭でも説明されているように、クラス変数は同一[[クラス (コンピュータ)|クラス]]と[[サブクラス (計算機科学)|派生クラス]]で共有される。ただし、クラス変数のアクセスレベルが<code>private</code>の場合あるいはアクセスレベルが[[パッケージ (Java)|パッケージ]]プライベート(デフォルト)派生クラスがパッケージ外に<!--ありそのクラスがパッケージプライベートで-->ある場合は、派生クラスから参照することはできない。
<syntaxhighlight lang="java">
class Hoge {
//hogeインスタンスでクラス変数fooを読むこともできる(ただし、推奨されない文法)。
System.out.println("hoge.foo = " + hoge.foo);
 
 
hoge.foo = 700; //クラス変数fooに700を代入
System.out.println("hoge.foo = " + hoge.foo); //fooを表示
System.out.println("hoge.var = " + hoge.var); //varを表示
}
}
匿名利用者