性質
在java中,類變量(也叫靜态變量)是類中獨立于方法之外的變量,用static修飾。(static表示“全局的”、“靜态的”,用來修飾成員變量和成員方法,或靜态代碼塊(靜态代碼塊獨立于類成員,jvm加載類時會執行靜态代碼塊,每個代碼塊隻執行一次,按順序執行))。
類變量被聲明為public static final類型時,類變量名稱一般建議使用大寫字母。如果靜态變量不是public和final類型,其命名方式與實例變量以及局部變量的命名方式一緻。
應用
static是C++中很常用的修飾符,它被用來控制變量的存儲方式和可見性,下面我将從static修飾符的産生原因、作用談起,全面分析static修飾符的實質。
static的兩大作用:
一、控制存儲方式:
static被引入以告知編譯器,将變量存儲在程序的靜态存儲區而非棧上空間。
1、引出原因:函數内部定義的變量,在程序執行到它的定義處時,編譯器為它在棧上分配空間,大家知道,函數在棧上分配的空間在此函數執行結束時會釋放掉,這樣就産生了一個問題: 如果想将函數中此變量的值保存至下一次調用時,如何實現?
最容易想到的方法是定義一個全局的變量,但定義為一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問範圍(使得在此函數中定義的變量,不僅僅受此函數控制)。
2、解決方案:因此C++ 中引入了static,用它來修飾變量,它能夠指示編譯器将此變量在程序的靜态存儲區分配空間保存,這樣即實現了目的,又使得此變量的存取範圍不變。
二、控制可見性與連接類型:
static還有一個作用,它會把變量的可見範圍限制在編譯單元中,使它成為一個内部連接,這時,它的反義詞為"extern"。
Static作用分析總結:static總是使得變量或對象的存儲形式變成靜态存儲,連接方式變成内部連接,對于局部變量(已經是内部連接了),它僅改變其存儲方式;對于全局變量(已經是靜态存儲了),它僅改變其連接類型。
類中的static成員:
一、出現原因及作用:
1、需要在一個類的各個對象間交互,即需要一個數據對象為整個類而非某個對象服務。
2、同時又力求不破壞類的封裝性,即要求此成員隐藏在類的内部,對外不可見。
類的static成員滿足了上述的要求,因為它具有如下特征:有獨立的存儲區,屬于整個類。
二、注意:
1、對于靜态的數據成員,連接器會保證它擁有一個單一的外部定義。靜态數據成員按定義出現的先後順序依次初始化,注意靜态成員嵌套時,要保證所嵌套的成員已經初始化了。消除時的順序是初始化的反順序。
2、類的靜态成員函數是屬于整個類而非類的對象,所以它沒有this指針,這就導緻了它僅能訪問類的靜态數據和靜态成員函數。



















