在許多傳統語言裡,程序都是作為啟動過程的一部分一次性載入的。隨後進行的是初始化,再是正式執行程序。在這些語言中,必須對初始化過程進行慎重的控制,保證static數據的初始化不會帶來麻煩。比如在一個static數據獲得初始化之前,就有另一個static數據希望它是一個有效值,那麼在C++中就會造成問題。
Java則沒有這樣的問題,因為它采用了不同的裝載方法。由於Java中的一切東西都是對象,所以許多活動變得更加簡單,這個問題便是其中的一例。正如下一章會講到的那樣,每個對象的代碼都存在於獨立的文件中。除非真的需要代碼,否則那個文件是不會載入的。通常,我們可認為除非那個類的一個對象構造完畢,否則代碼不會真的載入。由於static方法存在一些細微的歧義,所以也能認為“類代碼在首次使用的時候載入”。
首次使用的地方也是static初始化發生的地方。裝載的時候,所有static對象和static代碼塊都會按照本來的順序初始化(亦即它們在類定義代碼裡寫入的順序)。當然,static數據只會初始化一次。