static 表示「全域」或「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼區塊,但是Java語言中沒有全域變數的概念。
被static修飾的成員變數和成員方法獨立於該類別的任何物件。也就是說,它不依賴類別特定的實例,被類別的所有實例共用。 只要這個類別被加載,
#Java虛擬機就能根據類別名稱在執行時間資料區的方法區內定找到他們。因此,static物件可以在它的任何物件建立之前訪問,無需引用任何物件。
用public修飾的static成員變數和成員方法本質是全域變數和全域方法,當宣告它類別的物件時,不產生static變數的副本,而是 類別的所有實例共用同一個static變數。
static變數前可以有private修飾,表示這個變數可以在類別的靜態程式碼區塊中,或是類別的其他靜態成員方法中使用(當然也可以在非靜態成員方法中使用--廢話),但是不能在其他類別中透過類別名稱來直接引用,這一點很重要。其實你要搞明白,private是存取權限限定,static表示不要實例化就可以使用,這樣就容易理解多了。 static前面加上其它存取權限關鍵字的效果也以此類推。
static的一些特性:
(1) static變數也稱為靜態變數,靜態變數和非靜態變數的差異是:靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類別初次載入時會被初始化。而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。
(2)statice有兩種作用:一、只想為某特定域分配單一的儲存空間,而不考慮要去建立多少對象,甚至不建立對象;二、希望某個方法不與包含他的任何物件關聯在一起,也就是不創建任何物件也能呼叫其中的任何方法。
(3)被statice修飾的任何成員變數和成員方法獨立於該類別的任何對象,它不依賴類別的任何對象,對所有實例共享。
(4)靜態變數在記憶體中只有一個拷貝,jvm只對靜態分配一次內存,載入類別的過程中就完成對靜態變數的記憶體分配,可用類別名稱直接訪問。
(5)靜態程式碼是和class綁定的,class裝載成功就表示執行了你的靜態程式碼,而且以後不會再走這套靜態程式碼了。 Class.forName()的作用是要求JVM查找並載入指定的類,也即是說JVM會執行該類別的靜態程式碼段。
(6)靜態的方法屬性初始化,是在載入類別的時候初始化。而非靜態方法屬性初始化。
範例:
public class Test { static int i; static { i++; System.out.println("outt i:"+i); } static void outi() { i++; System.out.println("output i:"+i); } public static void main(String [] argStrings) { Test test=new Test(); test.outi(); } }
輸出結果:
outt i:1 output i:2
以上是Java關鍵字之static的詳細詳情介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!