類的加載,連接與初始化
-
加載:查找並加載類的二進制數據;
-
連接: 驗證(確保被加載類的正確性),準備(爲類的靜態變量分配內存,並將其初始化爲默認值),解析(把類中的符號引用轉換爲直接引用);
-
初始化:爲類的靜態變量賦予正確的初始值;
-
使用;
-
卸載;
Java程序對類的使用方式分爲兩種:
-
主動使用;
-
被動使用;
所有的Java虛擬機實現必須在每個類或接口被Java程序“首次主動使用時”才初始化它們;
主動使用:
-
創建類的實例;
-
訪問某個類或接口的靜態變量,或者對該靜態變量賦值;
-
訪問類的靜態方法;
-
反射;
-
初始化一個類的子類;
-
Java虛擬機啓動時被標明爲啓動類的類(含main方法);
-
JDK1.7開始提供的動態語言支持;
public class MyTest{
public void main(String[] args){
System.out.println(Mychild.str);
}
}
class MyParent{
public static String str="hello world";
static{
System.out.println(MyParent block);
}
}
class MyChild extends MyParent{
public static String str1="hello world";
static{
System.out.println(MyChild block);
}
}
這種情況下,子類的靜態方法不會執行,因爲,並沒有對子類主動使用,沒有對子類的靜態變量進行初始化。