之前應聘筆試的時候,遇到過很多次,給出一段**,裡面有static靜態變數,static**塊以及建構函式等,在它們初始化或者是**塊中設定列印log,然後問它們的列印順序。再此之前一直不知道具體考察的是什麼,好在現在終於知道了,考察的是程式的初始化過程。
那麼程式的初始化過程是怎樣的呢?main方法執行的時候,首先要去裝載包含它的類(beetle),然後發現beetle有個父類insect,就先去載入insect類,因為insect沒有父類了,就不必繼續載入類。這個時候會從根基礎類(在這個例子中根基礎類是insect)開始執行static初始化。static初始化包括static修飾的成員變數以及靜態**塊,兩者初始化的順序與它們定義的順序一致。先執行父類的static初始化,接著是子類的static初始化。static初始化完成之後,main方法開始執行,然後是父類的建構函式,再接著是子類的建構函式。
來看下面的程式:
class insect
//父類靜態變數
static int x1 = prt("static insect.x1 initialized");
//父類靜態**塊
static
static int prt(string s)
}class beetle extends insect
//子類呢建構函式
beetle()
//子類靜態成員變數
static int x2 = prt("static beetle.x2 initialized");
//子類靜態**塊
static int prt(string s)
public static void main(string args)
}
執行結果:
如上,例子直接反應了程式的初始化過程。
Java 初始化過程
初始化過程 載入器啟動並且找出匯出類derived的編譯 即名為derived.class的檔案之中 在對它載入的過程中,編譯器注意到它有乙個基類,於是繼續進行基類的載入 基類中的static變數初始化,然後是匯出類的static 如果乙個成員被宣告為 static,它就能夠在它的類的任何物件建立之...
java 初始化過程
初始化的過程 static靜態塊 父類的靜態塊 子類的靜態塊 父類的初始化塊 父類的建構函式 子類的初始化塊 子類的建構函式 舉例說明 class helloa static public class hellob extends helloa static public static void m...
java物件初始化過程
假設有一下類 class test test int n 0 我們知道,任何物件在使用前都會被初始化,方法裡面的區域性變數必須給初始化值才能通過編譯。現在我們來討論一下初始化的過程 對於字段 變數 而言,如果是基本型別,那麼即使不給初始值,都會得到jvm預設的初始值 boolean預設是false,...