1. 開始吧!
今天,我們來探討交流下靜態變數初始化程序,Java虛擬機在類加載期間也同樣遵循這個程序,
2. 初始化程序
在較高的層次上,JVM執行以下步驟:

首先,加載并鏈接類,然后,這個程序的“初始化”階段處理靜態變數初始化,最后,呼叫與類關聯的main方法,
在接下來的討論中,我們來探索下類變數初始化,
3. 類變數
在Java中,靜態變數也稱為類變數,也就是說,它們屬于一個類,而不是一個特定的實體,因此,類初始化的時候也將初始化靜態變數
相反,類的實體 初始化的時候也將初始化 實體變數(非靜態變數),類的所有實體共享該類的靜態變數,
以 StaticVariableDemo 類為例:
public class StaticVariableDemo {
public static int i;
public static int j = 20;
public StaticVariableDemo() {}
}
First, the JVM creates a Class object for the class StaticVariableDemo. Next, the static field initializers assign a meaningful default value to the static fields. In our example above, the class variable i is first initialized with an int default value of zero.
首先,JVM為 StaticVariableDemo 類創建一個Class物件,接下來,static 修飾的欄位將會被賦予一個有意義的默認值,在上面的例子中,類變數 i 首先使用用 int 的默認值0 來初始化,
代碼的書寫順序適用于靜態欄位初始化順序,首先,i將初始化,然后j將被初始化,完成初始化之后,類及其靜態成員將對其他類可見,
4. 靜態塊中的變數
再舉一個例子:
public class StaticVariableDemo {
public static int z;
static {
z = 30;
}
public StaticVariableDemo() {}
}
在這種情況下,變數初始化將按順序進行,首先,JVM最初將默認的int值0賦給變數z,然后,在static塊中,它被更改為30,
5. 靜態嵌套類中的變數
最后,讓我們以外部 StaticVariableDemo 類中的嵌套類為例:
public class StaticVariableDemo {
public StaticVariableDemo() {}
static class Nested {
public static String nestedClassStaticVariable = "test";
}
}
在本例中,StaticVariableDemo 類加載 Nested 類,它將初始化靜態變數 nestedClassStaticVariable,
6. 最后
在這篇短文中,我們簡要地解釋了靜態變數初始化,有關詳細資訊,請查看 Java語言規范.
如果你覺得文章還不錯,記得關注公眾號: 鍋外的大佬
劉一手的博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/224687.html
標籤:Java
上一篇:pycharm
下一篇:Java初始化靜態變數的時間順序
