クラス変数()または、静的メンバ変数()、静的フィールド()とは、同一クラス・派生クラスで共有される変数である。そのため、関連クラスに渡って共通に使用できるグローバル変数(大域変数)であるともいえる。これに対して、インスタンスごとに確保される変数のことを、インスタンス変数あるいは単にフィールド (計算機科学)、データメンバ、メンバ変数などと呼ぶ。 UMLではクラス変数のことを、特別な意味を持つ属性としてクラススコープ()と呼ぶ。本節ではスクリプト言語であるRubyでクラス変数の概略を記す。Rubyにおいては、@@で始まる変数がクラス変数となる。class A@@n="Default Value"endclass B < Aendclass C < Benda = A.newb = B.newc = C.newa.printClassVariable #=> Default Valueb.printClassVariable #=> Default Valuec.printClassVariable #=> Default Valuea.setClassVariable("Value is changed")a.printClassVariable #=> Value is changedb.printClassVariable #=> Value is changedc.printClassVariable #=> Value is changedなお、Rubyにおいてはクラス自身もClassクラスのインスタンスであるので、そのインスタンス変数(クラスインスタンス変数)も存在する。「クラスに属する変数」という意味で両者は共通するが、クラスインスタンス変数はインスタンスメソッドから直接使うことができないなど、機能としては別である。本節では、Javaにおけるクラス変数の例を記す。Javaにおいては、static修飾子を使うことでクラス変数を宣言できる。下記の例において、2行目で宣言されているfooはクラス変数であり、3行目で宣言されているvarはインスタンス変数である。冒頭でも説明されているように、クラス変数は同一クラスと派生クラスで共有される。ただし、クラス変数がcodice_1の場合や、パッケージプライベートで派生クラスがパッケージ外にありそのクラスがパッケージプライベートである場合は、派生クラスから参照することはできない。class Hoge {このHogeクラスを実際に使用する例:public class Main {実行結果この例ではインスタンス変数との違いを示すためにインスタンス変数varを用意した。クラス変数Hoge.fooとhoge.fooとanother.fooはすべて同一のものであるためどれかに値を代入するとどれを参照しても代入された値となる。この例ではまずHoge.fooに100を代入した。当然100を出力する。hoge.fooはHoge.fooとクラス変数を参照しているため100を出力する。次にhoge.fooに700を代入する。Hoge.fooもhoge.fooもどちらも700を出力する。次に新たにインスタンスanotherを生成する。another.fooに777を代入しanother.varには888を代入する。このとき、当然another.fooは777、another.varは888を出力する。ただし、Hoge.foo、hoge.fooの値は、Hogeクラスで共有されているクラス変数であるためどちらも777になっている。hoge.varは異なるインスタンスの変数であるため800のままである。クラス変数はクラスから生成される全てのインスタンスで共有可能な特徴を持つ変数である。この特徴を生かしたクラス変数の代表的な用途は以下の通り。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。