要想當好
程序員,沒有基礎(chǔ)怎么去寫呢,所以基礎(chǔ)要打好,對于程序員們寫好程序是非常關(guān)鍵的,這篇文章就來講解一下Java基礎(chǔ)之中的初始化知識。
一、對象創(chuàng)建過程(無繼承的情況)
Vehicle veh1 = new Vehicle();該句詳解如下:(摘自網(wǎng)絡(luò))
①右邊的“new Vehicle”,是以Vehicle類為模板,在堆空間里創(chuàng)建一個Vehicle類對象。
②末尾的()意味著,在對象創(chuàng)建后,立即調(diào)用Vehicle類的構(gòu)造函數(shù),對剛生成的對象進行初始化。構(gòu)造函數(shù)是肯定有的。如果沒創(chuàng)建,Java會補上一個默認的構(gòu)造函數(shù)。
③左邊的“Vehicle veh1”創(chuàng)建了一個Vehicle類引用變量。
④“=”操作符使對象引用指向剛創(chuàng)建的那個Vehicle對象。
假設(shè)有一個名為Dog的類,接下來創(chuàng)建一個對象:
1.當首次創(chuàng)建型為Dog的對象時(構(gòu)造器可以看成靜態(tài)方法),或者Dog類的靜態(tài)方法/靜態(tài)域首次被訪問時,Java解釋器必須查找類路徑,以定位Dog.class文件。
2.然后載入Dog.class(這將創(chuàng)建一個Class對象),有關(guān)靜態(tài)初始化的動作都會執(zhí)行。因此,靜態(tài)初始化只在Class對象首次加載的時候進行一次。
3.當你用new Dog()創(chuàng)建對象的時候,首先將在堆上為Dog對象分配足夠的存儲空間。
4.這塊存儲空間會被清零,這就自動地將Dog中的所有基本類型數(shù)據(jù)設(shè)置成了默認值(對數(shù)字來說就是0,對布爾型和字符型也相同),而引用則被置成了null。
5.執(zhí)行所有出現(xiàn)于域定義處的初始化動作。
6.執(zhí)行構(gòu)造器。(摘自thing in
java)
二、構(gòu)造函數(shù)/構(gòu)造器/構(gòu)造方法/初始化函數(shù):
通過提供構(gòu)函數(shù),類的設(shè)計者可確保每個對象都會得到初始化,初始化時,對象的數(shù)據(jù)成員被賦予初始值。Java中的對象都至少會有一個構(gòu)造函數(shù),如果沒有定義構(gòu)造函數(shù),Java編譯器會為我們自動生成一個默認構(gòu)造函數(shù)(無參),但是如果定義了一個構(gòu)造函數(shù)(無論是否有參),編譯器就不會幫你創(chuàng)建默認構(gòu)造函數(shù)。構(gòu)造函數(shù)能帶形式參數(shù),有了形式參數(shù)就可以在初始化對象時提供實際參數(shù)。
例如:
構(gòu)造器的名字和類的名字相同,構(gòu)造器是一種沒有返回值的特殊類型的方法。為了讓方法名相同而形式參數(shù)不同的構(gòu)造器同時存在,必須用到方法重載。
區(qū)分重載的方法:
每個重載的方法都必須有一個獨一無二的參數(shù)類型列表。
參數(shù)順序的不同也可以區(qū)分兩個方法。
注意:返回值不同不能用于區(qū)分重載方法。
例如:
運行結(jié)果如下所示:
Creating new Tree that is1feet tall
Tree is 1 feet tall
overloaded method:Tree is 1 feet tall
String: String first,int: 11
int: 99String: Int first
planting a seedling
重載與重寫的區(qū)別:
重載的方法名相同,參數(shù)列表不同。
重寫的方法名,參數(shù)列表還有返回值全部相同。(子類對父類方法的重寫)(這里暫不詳寫)
三、默認初始化值:
類的每個基本類型(byte,short,int,long,char,float,double,boolean)數(shù)據(jù)成員如果沒有進行初始化,編譯器會保證都有一個默認初始值(具體初始化為什么值看下邊代碼)。
而對于所有的引用數(shù)據(jù)類型默認為null。當將引用數(shù)據(jù)類型的常量或變量初始化為null時,表示引用數(shù)據(jù)類型的常量或變量不引用任何對象。
而對于方法中的局部變量如果不進行初始化,就會報錯。
變量會在任何方法(包括構(gòu)造器)被調(diào)用之前得到初始化。
代碼演示如下:
運行結(jié)果:
Date type Initial value
boolean false
char [ ]
byte 0
short 0
int 0
long 0
double 0.0
String null
array null
reference null