靜態屬性、靜態方法與靜態初始化器
static稱為靜態修飾符,它可以修飾類中的屬性和方法。
1.靜態屬性
被static修飾的屬性稱為靜態屬性,這類屬性乙個最本質的特點是:它們是類的屬性,而不屬於任何乙個類的具體物件。換句話說,對於該類的任何乙個具體物件而言,靜態屬性是乙個公共的儲存單元,任何乙個類的物件訪問它時,取到的都是相同的數值,同樣任何乙個類的物件去修改它時,也都是在對同乙個記憶體單元做操作。
靜態屬性節省空間;靜態屬性保持類物件的一致性修改
舉例:總和、基本工資等
2.靜態方法
static修飾符修飾的屬性是屬於類的公共屬性:與之相仿,用static修飾符修飾的方法,是屬於整個類的類方法;而不用static至少有三重含義:
(1)呼叫這個方法時,應該使用類名做字首,而不是某乙個具體的物件名;
(2)非static的方法是屬於某個物件的方法,在這個物件建立時物件的方法在記憶體中擁有自己專用的**段;而static的方法是屬於整個類的,它在記憶體中的**段將隨著類的定義而分配和裝載,不被任何乙個物件專有:
(3) 由於static方法是屬於整個類的,所以它不能操縱和處理屬於某個物件的成員變數,而只能處理屬於整個類的成員變數。也即,static方法只能處理static的資料。
3.靜態初始化器
靜態初始化器是由關鍵字static引導的一對大括號括起的語句組。它的作用與類的建構函式有些相似,都用來完成初始化的工作,但是靜態初始化器與建構函式有三點根本的不同:
(1)建構函式是對每個新建立的物件初始化,而靜態初始化器是對每個類進行初始化;
(2)建構函式是在用new運算子產生新物件時由系統自動執行,而靜態初始化器則是在它所屬的類加載入記憶體時由系統呼叫執行的;
(3)不同於建構函式,靜態初始化器不是方法,沒有方法名、返回值和引數列表。
讓我們考慮如下的問題,所以考慮由系統自動為新雇員物件生成編號變數的值,將employee類的屬性定義改寫為:
class employee //定義雇員類
建構函式為:
employee(string name,char ***,double sal) //建構函式,完成初始化工作
{ m_empno=m_nextempno++; //新雇員使用了新編號之後,再產生另乙個新編號
m_empname=new string(name);
m_empgender=***;
if(sal>=m_minsalary) //工資額不合理時使用最低工資
m_empsalary=sal;
else
m_empsalary=m_minsalary;
這裡,為實現編號不重複地自動生成,引入乙個類成員m_nextempno,它的值是下乙個新建立的雇員物件的編號。每當有新物件生成時,系統呼叫建構函式,將m_nextempno的當前值賦給新雇員的編號變數m_empno,然後讓類靜態屬性m_nextempno自動加一,這樣新物件的編號就不會與已有物件的編號相重複。表面看來整個問題似已解決,但實際上還有很關鍵的一步沒有完成:那就是static的類屬性m_nextempno的初始化問題。
總之,靜態初始化器的作用是對整個類完成初始化操作,包括給static類成員賦初值等,它在系統向記憶體載入時自動完成。
靜態初始化器
1 靜態初始化器是由static修飾的一對花括號 括起來的語句組。它的作用和構造方法有待你相似,都是用來完成初始化工作的,但是靜態初始化器與構造方法有以下幾點根本不同。a 構造方法是對每乙個新建立的物件初始化,而靜態方法是對類自身進行初始化。b 構造方法是在new運算子建立新物件的時候由系統執行,而...
靜態初始化器
1 靜態初始化器是由static修飾的一對花括號 括起來的語句組。它的作用和構造方法有待你相似,都是用來完成初始化工作的,但是靜態初始化器與構造方法有以下幾點根本不同。a 構造方法是對每乙個新建立的物件初始化,而靜態方法是對類自身進行初始化。b 構造方法是在new運算子建立新物件的時候由系統執行,而...
靜態屬性靜態方法
靜態屬性用於儲存內的公有資料 靜態方法裡面只能訪問靜態屬性 靜態成員不需要例項化就可以訪問 類的內部可以通過self或者static關鍵字訪問自身的靜態成員 子內方法中可以通過parent關鍵字訪問父類的靜態成員 可以通過類的名稱在類定義外部訪問靜態成員 class human class nbap...