靜態變量能夠用來計數。
【注意:假如 static int a=0,計數到20。可是當服務器重啓時,靜態變量又會被從新初始化a=0,實際業務不符合】java
----------------------服務器
java 中的變量大體分爲 成員變量 和 局部變量 兩大類。
1、成員變量:
在類體裏面定義的變量稱爲成員變量;
若是該成員變量有 static 關鍵字修飾,則該成員變量稱爲 靜態變量 或 類變量;
若是該成員變量沒有 static 關鍵字修飾,則該成員變量被稱爲 非靜態變量 或 實例變量。spa
1、類變量 (靜態變量)
(1) 能夠向前引用
(2) 變量屬於類自己
(3) 類變量不依賴類的實例,類變量只在初始化時候在棧內存中被分配一次空間,不管類的實例被建立幾回,都再也不爲類變量分配空間
(4) 經過類的任意一個實例來訪問類變量,底層都將將其轉爲經過類自己來訪問類變量,它們的效果是同樣的
(5) 一旦類變量的值被改變,經過類或類的任意一個實例來訪問類變量,獲得的都將是被改變後的值
(6) 將在類的初始化以前初始化
2、實例變量(非靜態變量)
(1) 不能向前引用,若是向前引用,則稱爲非法向前引用,這是不容許的
(2) 變量屬於類的實例對象
(3) 隨着類的實例被建立而分配內存空間
2、局部變量:
形參、方法內定義的變量、代碼塊中定義的變量,都屬於局部變量。對象
注:形參和方法內定義的變量不能用static修飾,能夠用final修飾內存
下面代碼,編譯錯誤編譯
public void test(static int b){
static int a = b;
}
***********************************************************************************
非靜態代碼塊
直接由 { } 包起來的代碼,稱爲非靜態代碼塊
靜態代碼塊
直接由 static { } 包起來的代碼,稱爲靜態代碼塊
類變量(靜態變量)、實例變量(非靜態變量)、靜態代碼塊、非靜態代碼塊 的初始化時機
由 static 關鍵字修飾的(如:類變量[靜態變量]、靜態代碼塊)將在在類加載的時候(沒有new對象的時候就進行初始化)類被初始化建立實例對象以前被初始化,並且是按順序從上到下依次被執行。
沒有 static 關鍵字修飾的(如:實例變量[非靜態變量]、非靜態代碼塊)初始化其實是會被提取到類的構造器中被執行的,可是會比類構造器中的代碼塊優先執行到,其也是按順序從上到下依次被執行。test