Java變量初始化的時(shí)機(jī)
對(duì)于JAVA中變量的初始化是一個(gè)很基礎(chǔ)的問題,其中的一些問題也是易被學(xué)習(xí)者所忽略。當(dāng)在編寫代碼的時(shí)候碰到時(shí),常被這些問題引發(fā)的錯(cuò)誤,感覺莫名其妙。而且現(xiàn)在許多大公司的面試題,對(duì)于這方面的考查也是屢試不爽。以下是對(duì)java變量初始化的時(shí)機(jī)的分析。
【java變量執(zhí)行初始化的步驟】
java是一門強(qiáng)類型語言,因此java語言規(guī)定每個(gè)變量必須先聲明,然后才能使用,聲明變量時(shí)必須指定該變量的數(shù)據(jù)類型。首先看下面這條語句的執(zhí)行過程:
int a = 5;
實(shí)際上面這條語句會(huì)被拆分成兩個(gè)過程執(zhí)行:
?。?)int a ;//創(chuàng)建java對(duì)象時(shí)根據(jù)該語句為變量分配內(nèi)存空間;
?。?)a = 5;//賦值操作會(huì)最終被提取到構(gòu)造器中執(zhí)行初始化操作。
實(shí)際上在java中,在使用new操作符創(chuàng)建一個(gè)類的實(shí)例對(duì)象的時(shí)候,開始分配空間并將成員變量初始化為默認(rèn)的數(shù)值,在這里并不是指將變量初始化為在變量定義處的初始值,對(duì)于基本類型變量,默認(rèn)值空值是0或false,對(duì)于引用類型變量,默認(rèn)空值為null。這一切都是在構(gòu)造函數(shù)執(zhí)行之前,變量的真正初始化是在構(gòu)造函數(shù)中執(zhí)行。
【java中變量初始化的時(shí)機(jī)】
1、程序可以在3個(gè)地方對(duì)實(shí)例變量進(jìn)行初始化:
(1)定義實(shí)例變量的時(shí)候指定初始值;
(2)非靜態(tài)初始化代碼塊中對(duì)實(shí)例變量指定初值;
(3)構(gòu)造器中對(duì)實(shí)例變量指定初值。
雖然程序在3個(gè)地方都可對(duì)實(shí)例變量指定初始值,但(1)、(2)處的賦值操作最終會(huì)被提取到構(gòu)造器中執(zhí)行。且(1)、(2)的執(zhí)行順序與他們?cè)谠闯绦蛑谐霈F(xiàn)的順序相同??梢酝ㄟ^JDK的javap工具來看程序的執(zhí)行過程:
2、java中類變量初始化的時(shí)機(jī):
(1)定義類變量的時(shí)候指定初始值;
?。?)靜態(tài)初始化代碼塊中對(duì)類變量指定初值。
這里類變量初始化的時(shí)機(jī)為兩處,而沒有在構(gòu)造器中這一說。這也很容易理解,因?yàn)轭愖兞渴穷惣虞d的時(shí)候執(zhí)行的初始化,且只執(zhí)行一次,而調(diào)用構(gòu)造器是對(duì)象實(shí)例化執(zhí)行的,每實(shí)例化一次對(duì)象,執(zhí)行一次。
posted on 2014-08-12 09:34 順其自然EVO 閱讀(203) 評(píng)論(0) 編輯 收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄