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、靜態函式
函式是否用靜態修飾,參考一函式功能是否有訪問到物件中的特有資料。從
從程式碼看,該功能是否需要訪問非靜態的成員變數,如果需要,該功能就是
非靜態的,否則靜態。