我直接用例子說明一下
public
class
testinit
public
initialordertest()
public
static
void
main( string args )
}
1.靜態變數2.靜態初始化塊
3.變數
4.初始化塊
5.構造器
對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序是靜態變數》靜態初始化塊》變數》初始化塊》構造器
public
class
a
public
a()
}public
class
bextends
a
public
b()
public
static
void
main(string args)
}
1.父類靜態變數2.父類靜態初始化塊
3.子類靜態變數
4.子類靜態初始化塊
5.main方法
6.父類變數
7.父類初始化塊
8.父類構造器
9.子類變數
10.子類初始化塊
11.子類構造器
子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。靜態變數、靜態初始化塊,變數、初始化塊初始化了順序取決於它們在類中出現的先後順序。
class super
}class son extends super
}public
class
noninit
}
由此可以看出,通過陣列定義來引用類,不會觸發此類的初始化(僅僅只是引用)
public
class
finalinit
}class finalfieldclass
public
static
final string finalfield = "final變數";
}
1.final變數
這裡沒有初始化finalfieldclass類,是因為在編譯的時候,常量(static final 修飾的)會存入呼叫類的常量池(此處是main函式所在的類的常量池),呼叫的時候本質上沒有引用到定義常量的類,而是直接訪問了自己的常量池,所以不會觸發類的初始化
java初始化順序
1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...
java初始化順序
例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...
JAVA初始化順序
1 當使用新建物件例項或者呼叫靜態成員變數或者方法時,初始化靜態變數 2 靜態變數在初始化時在前面的先初始化,靜態塊和靜態變數相同對待 在初始化過程中,有新建物件例項的時候,暫時停止後面的靜態變數初始化 3 靜態變數沒有初始化時,使用預設的初始值 如int為0 4 新建物件例項,對非靜態的成員變數進...