以類別為基礎物件導向程式設計裡,類別變數(class variable)是定義在類別裡的變數,不論類別存在多少實例,同個類別的類別變數都是一個,不會因為實例數量而有多個變數[1][2][3][4][5]

類別變數不是實例變數(instance variable),是一種特別的類別屬性(或是類別屬性、資料成員)。「類別」和「實例」的差異也可以用在方法(成員函式)上,類別可以有實例方法(instance method),也可以有類別方法。

靜態成員變數和靜態成員函式

编辑

有些程式語言中,類別變數和類別方式可能是靜態解析(statically resolved),不是用动态分派方式調用,也有可能是在編譯時配置其記憶體(整個類別只配置一次,如同靜態變數一樣)。而有些語言中,可能上述方式中的一種或全部改為動態方式。例如,若可以在運行時動態定義類別,其成員變數也會在類別定義時動態配置記憶體,另外在一些語言中的類別方法會用動態分派來處理。

因此,在一些語言,靜態成員變數(static member variable)和靜態成員函式(static member function)就是類別變數和類別函式,但不是所有程式語言都是如此。上述的詞常用在JavaC#[5]C++,其中類別變數和類別方法會用static關鍵字宣告,稱為靜態成員變數和靜態成員函式。

範例

编辑

C++

编辑
struct Request {

    static int count;
    int number;

    Requestobject() {
        number = count; // 修改實例變數 "this->number"
        ++count; // 修改類別變數 "Request::count"
    }

};

int Request::count = 0;

在上述C++範例中,每一次呼叫构造器,類別變數Request::count就會加一,因此Request::count可以記錄請求創建的數量,每一個新請求的物件會循序給予number,數值不會重複。因為count是類別變數,只有一個Request::count物件,相對的,每一個請求的物件都有其自己的number變數。

另外,Request::count只會初始化一次。

Python

编辑
class Dog:
    vertebrate_group = "mammals"  # 類別變數

dog_1 = Dog
print(dog_1.vertebrate_group)  # 存取類別變數

上述程式碼的資訊不多,因為在Dog類別中只有一個類別變數,將狗歸類為哺乳動物I。有關類別變數中,可以客制化物件(在此例中,是dog_1),在類別中增加一個或多個實例變數


類別變數也可以透過ClassVar來提示:

from typing import ClassVar

class Dog:
    vertebrate_group: ClassVar[str] = "mammals"

參考資料

编辑
  1. ^ The Java Tutorial, Variables. [2010-10-21]. (原始内容存档于2011-11-17). 
  2. ^ The Java Tutorial, Understanding Instance and Class Members. [2010-10-21]. (原始内容存档于2011-11-21). 
  3. ^ The Python Language Reference, Compound Statements. [2010-10-21]. (原始内容存档于2012-10-22). 
  4. ^ Objective-C Runtime Reference. Apple Developer. [1 April 2018]. (原始内容存档于2018-07-07). 
  5. ^ 5.0 5.1 Class Variables in C#. Syntaxdb. [1 April 2018]. (原始内容存档于2026-03-12). 

📚 Artikel Terkait di Wikipedia

成员变量

instance of this variable will be created for each new instance of Foo. The lifespan of this variable is equal to the lifespan of "this" instance of Foo */ int

单例模式

Singleton* instance = nullptr; // declaration class variable int value; public: // defines a class operation that lets clients access its unique instance. static

實例變數

在以類別為基礎、物件導向程式設計裡,實例變數('instance variable)是定義在類別裡的變數(成员变量),類別裡每一個初始化的物件都有一個此變數的實例,且各物件的實例變數是互相獨立的。實例變數類似類別變數,但實例變數不是靜態變數。在C++或Java語言中,實例變數是在類別中宣告,但是是

惰性初始化

class end b = Blogger.new b.instance_variable_get(:@auth_token) # returns nil b.auth_token # returns token b.instance_variable_get(:@auth_token) # returns

构造器

input) { data = input; // This is an assignment } // Declaration of instance variable(s). private int data; } // Code somewhere else // Instantiating an

Ruby

一般小寫字母、底線開頭:變量(Variable)。 $開頭:全局變量(Global variable)。 @開頭:實例變量(Instance variable)。 @@開頭:類別變量(Class variable)類別变量被共享在整个继承链中 大寫字母開頭:常數(Constant)。

JSP

serverInstanceVariable = 1; %> 一种是脚本标签,在JAVA SERVLET的类的_jspService()方法中放入所包含的语句。 <% int localStackBasedVariable = 1; out.println(localStackBasedVariable);

Objective-C

NSLog(@"Access by message (%@), dot notation(%@), property name(%@) and direct instance variable access (%@)", [aPerson name], aPerson.name, [aPerson valueForKey:@"name"]