1. 隱藏(避免不同檔案的函式和變數命名衝突)
2.生命週期(對於變數來說必須在程式開始執行時進行初始化,不可改變)
1.如果作為static的區域性變數可以在函式內定義,它的生存期為整個源程式,但是其作用域仍與自動變數相同,只能在定義該變數的函式內使用該變數。
2.退出該函式後, 儘管該變數還繼續存在,但不能使用它。
3.static變數是預設初始化為0,其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00。
3.在類中定義(必須進行初始化)
static宣告的變數和成員函式:
1.初始化時使用作用域運算子來標明它所屬類;
2.靜態資料成員是類的成員,而不是物件的成員;
3.對其取位址操作,變數位址是指向其資料型別的指標 ,函式位址型別是乙個「nonmember函式指標」。
4.static並沒有增加程式的時空開銷,相反還縮短了子類對父類靜態成員的訪問 時間,節省了子類的記憶體空間。
static宣告的成員函式:
1.沒有this指標,僅能訪問類的靜態資料和靜態成員函式;
2.不能被定義為虛函式;
4.初始化
靜態成員初始化與一般資料成員初始化不同:
1.初始化在類體外進行,而前面不加static,以免與一般靜態變數或物件相混淆;
2.初始化時不加該成員的訪問許可權控制符private,public等;
3.初始化時使用作用域運算子來標明它所屬類;
所以我們得出靜態資料成員初始化的格式:
《資料型別》《類名》::《靜態資料成員名》=《值》
ps:為了防止父類的影響,可以在子類定義乙個與父類相同的靜態變數,以遮蔽父類的影響。這裡有一點需要注意:靜態成員為父類和子類共享,重複定義了靜態成員,我們的編譯器採用了一種絕妙的手法:name-mangling 用以生成唯一的標誌以避免錯誤。
關於static 在類中的使用問題,個人的學習心得如下
why use static?
1.用於實現在同乙個類中,多個物件中共享資料,協調物件間的公用資料;
2.靜態變數有著全域性變數的優勢,又不會被濫用,需要靜態成員函式管理靜態變數;
3.類的靜態成員既屬於類,也屬於物件;
怎麼用?
1.static 修飾資料成員需要進行初始化;
2.在類外進行初始化,類外不需要帶 static 關鍵字;
3.類的宣告和實現不在同一檔案中時 ,在.cpp檔案中進行初始化,避免多重定義(不能在.**件進行定義函式和變數);
4.static 宣告的資料成員,不佔類物件的空間,不依賴於物件;
5.可以用《類名》::《靜態資料成員名》 使用,受許可權的控制;
6.static修飾函式,目的是為了管理靜態變數,只能訪問靜態資料成員和靜態成員函式,因為靜態成員函式沒有this指標;
7.非靜態成員函式,是可以訪問靜態成員的。
static關鍵字筆記
static關鍵字 作用 是乙個修飾符,用於修飾成員 成員變數,成員方法 1.被static 修飾後的成員變數只有乙份 2.當成員被static修飾之後,多了一種訪問方式,除了可以物件呼叫之外,還可以被類直接呼叫 類名.靜態成員 static的特點 1.隨著類的載入而被載入 2.優先於物件的存在 3...
關鍵字static學習
關於static關鍵字的使用,它可以用來修飾的成員變數和成員方法,被修飾的成員是屬於類的,而不是單單是屬 於某個物件的。也就是說,既然屬於類,就可以不靠建立物件來呼叫了。當 static 修飾成員變數時,該變數稱為類變數。該類的每個物件都共享同乙個類變數的值。任何物件都可以更改 該類變數的值,但也可...
Java學習筆記 static關鍵字
1 可以修飾成員變數和成員方法 2 隨著類的載入而載入 3 優先於物件存在 4 被類的所有物件共享 這是我們判斷該不該使用靜態的依據 5 通過類名呼叫 既可以通過物件名呼叫,也可以通過類名呼叫,建議通過類名呼叫 靜態的內容在方法區的靜態區 1 在靜態中沒有this物件 2 靜態只能訪問靜態 1 所屬...