1. 程式人生 > >JAVA static關鍵字

JAVA static關鍵字

比如建立一箇中國人的程式,則每個物件的國籍屬性都為China。如果每個物件都存一份,會浪費空間。因此需要用static關鍵字將此變數設定為類變數(相當於預設/公有屬性),該資料被該類的物件所共享。(比如學校的飲水機(static),在沒來學校之前他便已經存在。而教室裡的人需要用自己的杯子(非static)來接水才可以喝。飲水機隨著教室(相當於類)的消失而消失,而杯子隨著每個同學(相當於物件)的消失而消失)。

因此,是static變數先有,才能將物件加載出來。所以,static在類的載入時被初始化!所以static變數只有一份,如果被其中的一個物件修改,則別的物件也隨之改動。

static特點:

1、類變數可以被物件呼叫,也可以用類直接呼叫

2、static是一個修飾符,用於修飾成員

3、static修飾的成員被所有的物件共享

4、static優先於物件存在,因為static成員隨著類的載入而載入

5、static儲存的是共享資料,物件中儲存的是特有資料

成員變數和靜態變數的區別:

1、兩個變數的生命週期不同

      成員變數隨著物件的建立而存在,隨著物件的被回收而釋放

      靜態變數隨著類的載入而存在,隨著類的消失而消失。

      因此靜態方法不能呼叫非靜態變數!因為物件還沒有存在,成員變數還沒有

      載入(當於沒有),而靜態變數在類的載入時已經存在,因此無法呼叫。

2、呼叫方式不同

3、成員變數也叫例項變數

      靜態變數也叫類變數

4、資料儲存位置不同

      成員變數儲存在堆記憶體的物件中,也叫物件的特有資料    

      靜態變數儲存在方法區的靜態區中,所以也叫物件的共享資料

靜態使用的注意事項:

1、靜態方法只能訪問靜態成員,(非靜態既可以訪問靜態也可以訪問非靜態)

2、靜態方法中不可以使用this或者super關鍵字(沒物件)。

3、主函式是靜態的,所以要想在主函式中呼叫非靜態變數,只能通過建立物件呼叫。

什麼時候使用靜態

1、靜態變數

      當分析物件中所具備的成員變數的值都是相同的,這時這個成員就可以被靜     

      態修飾。如果有一個物件需要改變就不能作為靜態值。

      若果是相同的資料,物件不需要做修改,只要使用即可,不需要儲存在物件 

      中,定義成靜態的。

2、靜態函式

      函式是否用靜態修飾,參考一函式功能是否有訪問到物件中的特有資料。從    

      從程式碼看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是    

      非靜態的,否則靜態。