2.3深入探討函數(shù): 2.3.1構(gòu)造函數(shù)、默認(rèn)構(gòu)造函數(shù)、 缺省構(gòu)造函數(shù) 對(duì)于上面的實(shí)例,它已經(jīng)能完成絕大部分工作了,但它還是不完善的,還有許許多多的細(xì)節(jié)等到我們?nèi)ネ晟疲∫苍S有的同學(xué)已經(jīng)注意到了,當(dāng)我創(chuàng)建完“jingwei”這個(gè)對(duì)象時(shí),這個(gè)對(duì)象的所有的屬性都是空的,也就是說(shuō):這個(gè)對(duì)象的姓名是未定的、年齡是未定的、性別是未定的、薪水是未定的、午餐也是未定的。而我們想把這些屬性都添加上去,就還要用對(duì)象調(diào)用相應(yīng)的方法,去一個(gè)個(gè)修改!天啊,這簡(jiǎn)直是太麻煩了!有沒(méi)有什么好方法能夠在我們創(chuàng)建對(duì)象的同時(shí)就完成了對(duì)屬性賦值的操作呢?哦不,應(yīng)該說(shuō)是對(duì)屬性的初始化呢?當(dāng)然沒(méi)問(wèn)題了,這就需要所謂的構(gòu)造函數(shù)! 構(gòu)造函數(shù)是類(lèi)中最特殊的函數(shù),它與析構(gòu)函數(shù)的功能正好相反! 從特征上來(lái)說(shuō):1.它是編程語(yǔ)言中唯一沒(méi)有返回值類(lèi)型的函數(shù)。 2.它的名稱(chēng)與類(lèi)的名稱(chēng)必須要完全相同。 3.它必須被聲明為公共(public)的類(lèi)型 4,可以對(duì)構(gòu)造函數(shù)進(jìn)行重載。 5.它在創(chuàng)建對(duì)象是自動(dòng)被調(diào)用。 從功能上來(lái)說(shuō):1.它是對(duì)類(lèi)中的屬性進(jìn)行初始化。 其實(shí),對(duì)于上面的程序來(lái)說(shuō)我們沒(méi)有自己定義構(gòu)造函數(shù)。但是,在這種情況下,系統(tǒng)會(huì)自動(dòng)為我們定義一個(gè)“默認(rèn)構(gòu)造函數(shù)”。他會(huì)把數(shù)值變量自動(dòng)賦值為0,把布爾行變量賦值為false等等(但在C++中,默認(rèn)構(gòu)造函數(shù)不初始化其成員)。如果程序員定義了構(gòu)造函數(shù),那么系統(tǒng)就不會(huì)再為你的程序添加一個(gè)缺默認(rèn)造函數(shù)了。(在這里,我們提倡的是自己定義構(gòu)造函數(shù),而不是用系統(tǒng)的默認(rèn)構(gòu)造函數(shù)) 還是看個(gè)實(shí)例吧!這樣比較清楚一些!
| //employee.java public class employee{ private String name; //員工姓名 private int age; //員工年齡 private char sex; //員工性別 private float emolument; //員工薪水 private boolean lunch; //員工午餐 //……等等 public employee(){ //這個(gè)就是“默認(rèn)”構(gòu)造函數(shù) name = “jw”; //設(shè)置員工姓名 age = 20; //設(shè)置員工年齡 sex = “M”; //設(shè)置員工性別 emolument = 100; //設(shè)置員工薪水 lunch = false; //設(shè)置員工午餐 } public void heater(){ //這個(gè)方法是用來(lái)加工員工的午餐 lunch = true; } //……等等 }; |
|