Java變量初始化的時機

    對於JAVA中變量的初始化是一個很基礎的問題,其中的一些問題也是易被學習者所忽略。當在編寫代碼的時候碰到時,常被這些問題引發的錯誤,感覺莫名其妙。而且現在許多大公司的面試題,對於這方面的考查也是屢試不爽。以下是對java變量初始化的時機的分析。    

【java變量執行初始化的步驟】   

    java是一門強類型語言,因此java語言規定每個變量必須先聲明,然後才能使用,聲明變量時必須指定該變量的數據類型。首先看下面這條語句的執行過程:

int a = 5;

實際上面這條語句會被拆分成兩個過程執行:

(1)int a ;//創建java對象時根據該語句爲變量分配內存空間;

(2)a = 5;//賦值操作會最終被提取到構造器中執行初始化操作。

       實際上在java中,在使用new操作符創建一個類的實例對象的時候,開始分配空間並將成員變量初始化爲默認的數值,在這裏並不是指將變量初始化爲在變量定義處的初始值,對於基本類型變量,默認值空值是0或false,對於引用類型變量,默認空值爲null。這一切都是在構造函數執行之前,變量的真正初始化是在構造函數中執行。

【java中變量初始化的時機】

     1、程序可以在3個地方對實例變量進行初始化:

    (1)定義實例變量的時候指定初始值;

    (2)非靜態初始化代碼塊中對實例變量指定初值;

    (3)構造器中對實例變量指定初值。

     雖然程序在3個地方都可對實例變量指定初始值,但(1)、(2)處的賦值操作最終會被提取到構造器中執行。且(1)、(2)的執行順序與他們在源程序中出現的順序相同。可以通過JDK的javap工具來看程序的執行過程:

wKioL1Pjb6eR_MvTAAJPVPyb9Ho017.jpg

     2、java中類變量初始化的時機:

    (1)定義類變量的時候指定初始值;

    (2)靜態初始化代碼塊中對類變量指定初值。

    這裏類變量初始化的時機爲兩處,而沒有在構造器中這一說。這也很容易理解,因爲類變量是類加載的時候執行的初始化,且只執行一次,而調用構造器是對象實例化執行的,每實例化一次對象,執行一次。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章