同一類的全部實例的靜態變量共享用一塊內存區。java
但兩個jvm之間並不會共享數據。類被加載以後,系統爲之生成一個對應的class對象。jvm
1.類的加載spa
將類的class文件讀入內存,並建立class對象。對象
2.鏈接接口
鏈接的過程分爲三步:內存
(1)驗證虛擬機
被加載的類的內部結構是否正確、協調。編譯
(2)準備class
爲類變量分配內存並設置默認初始值。變量
(3)解析
將類的二進制數據中的符號引用替換成直接引用。
3.初始化
虛擬機負責對類進行初始化,主要對類變量進行初始化。
1.聲明類變量時指定初始值。
2.使用靜態初始化塊爲類變量。
jvm初始化一個類包含如下幾個步驟:
1.若是這個類尚未被加載和鏈接,則先加載並鏈接該類。
2假如該類的直接父類尚未被初始化則先初始化其直接父類。
那麼系統在何時纔會初始化類尼?
當java程序首次經過下面6種方式使用類或者接口時,系統會初始化該類和接口的。
(1)建立類的實例,包括new操做符來建立實例,經過反射來建立,反序列。
(2)調用某個類的類方法(靜態方法)
(3)訪問某個類或接口的類變量或爲該類變量賦值。
注:對於final型的類變量,若是該類變量的值在編譯時就能夠肯定下來。不會致使類的初始化。