什么是static
Java中并不存在全局變量的概念敞恋,但是我們可以通過static實現(xiàn)一個“偽全局”的概念运翼,static可以用來修飾方法狸捅,變量和代碼塊偎巢。
Java把內存分為堆內存和棧內存,其中棧內存用來存放基本數(shù)據(jù)類型變量屡限,數(shù)組和對象引用品嚣;堆內存用來存放對象;JVM加載一個類時囚霸,若該類存在static修飾的方法腰根,變量則會為其在固定位置開辟一塊內存區(qū)域激才。static具有不可恢復性拓型。同時被static修飾的成員變量和成員方法不依賴于類。所有實例的引用都指向同一個地方瘸恼,對其一個實例修改劣挫,其它實例都會發(fā)生相應改變
public static int number = 0;
public TestString() {
number ++;
}
public static void main(String [] args0){
TestString testString1 = new TestString();
TestString testString2 = new TestString();
System.out.println(testString1.number);
System.out.println(testString2.number);
}
輸出結果
2
2
static的用法
static修飾的成員變量和靜態(tài)方法,直接通過類名來加載东帅。static修飾的代碼塊表示靜態(tài)代碼塊压固,當JVM裝載類的時候,就會執(zhí)行這塊代碼靠闭,其用處非常大帐我。
- static修飾變量
靜態(tài)變量隨著類的加載完成初始化,在內存中僅有一份愧膀,且JVM也只會為他分配一次內存拦键,同時類所有的實例都共享靜態(tài)變量。實例變量每創(chuàng)建一個實例都會創(chuàng)建一個實例變量檩淋。
使用場景:對象之間共享數(shù)據(jù) - static修飾方法
static方法是必須實現(xiàn)的不能與abstract共用芬为。 - static修飾代碼塊
靜態(tài)代碼塊會隨著類的加載一塊執(zhí)行,它可以在代碼中實現(xiàn)的位置沒有關系。
static的局限
- 只能調用static變量和方法
- 不能以任何形式引用this媚朦,super
- static在定義時就要對其初始化
總結
無論是修飾變量氧敢,方法還是代碼塊。只要用static修飾询张。都會在類加載時就準備好孙乖,可以不用依賴于對象。反之份氧,必須依賴于對象實例的圆。