例項如下:
public class loadingtest
public static void main(string args)
}
結果:
初始化 value1 之前-->10初始化 value2 之前-->10
初始化 value1 之後-->10
初始化 value2 之後-->0
分析:
類的載入流程:載入位元組碼、驗證階段、準備階段、解析階段、初始化階段* 在準備階段:jvm會對存放在方法區中的類資料資訊的類變數執行初始化
* 這裡的初始化只是對類中的所有靜態變數分配記憶體空間,並為其設定初始值
* 初始化階段:jvm會將乙個類中所有的static關鍵字標示的**統統執行一遍
* 回到程式,為什麼結果是這樣呢?
* 因為:首先在準備階段,jvm會按照順序準備obj、value1、value2
* 也就是開闢空間並設定初始值,此時obj=null,value1=value2=0;然後,到了初始化階段,會一次檢查
* obj、value1、value2是否需要初始化,obj通過構造方法初始化,
* 此時value1、value2的初始值被覆蓋為10,然後到value1,使用者沒有直接賦值
* 不用覆蓋,最後到了value2,使用者賦值0,那麼就會覆蓋之前的值,因此value2又回到0
接下裡我們變換**的順序:
public static int value1;
public static int value2=0;
public static loadingtest2 obj=new loadingtest2();
其它不變,執行的結果是:載入的過程還是和上面解釋的一樣,只是因為**的順序發生變化結果就不同。
初始化 value1 之前-->10
初始化 value2 之前-->10
初始化 value1 之後-->10
初始化 value2 之後-->10
總結:類載入的結果和**的順序有關。
乙個游標簡單示例
下面是乙個游標的例項,方便初學者學習,也可以防止自己忘記 if exists select 1 from sysobjects where name hehe drop procedure hehe goset ansi nulls on set quoted identifier on gocre...
乙個MEX程式示例
mex檔案是由c或fortran語言編寫的源 經matlab編譯器處理而產生的二進位制檔案。它可以被matlab直譯器自動裝載並執行的動態鏈結程式,類似windows下的dll檔案。mex檔案實現了c語言與matlab的介面,以下例子闡述該介面。include mex.h include doubl...
乙個最簡單的MFC程式框架剖析
首先在vc中 我使用的是vc2008 建立乙個win32應用程式,並且選擇空專案。建立完成後,選擇專案屬性 配置屬性 常規 mfc的使用 選擇在共享dll中使用mfc。現在這個空專案中沒有任何的檔案。class public public virtual bool initinstance fram...