在聲明的時(shí)候直接賦值與在構(gòu)造函數(shù)中再賦值?
聲明的時(shí)候,不管你是否賦值,不同的類(lèi)型(Build-in的基本類(lèi)型和Class)都有缺省的值,比如int就是0,Object就是null.
所以,如果沒(méi)有特別的初始賦值,不用在構(gòu)造函數(shù)里去初始化properties / Fields,加重對(duì)象創(chuàng)建時(shí)無(wú)謂的負(fù)擔(dān);換言之,如果在對(duì)象創(chuàng)建時(shí)期沒(méi)有特別的初始化要求,缺省構(gòu)造函數(shù)也不不用寫(xiě),JVM自己知道處理。
顯示的構(gòu)造函數(shù)自有其使用的場(chǎng)合。它給你提供了一種時(shí)機(jī),在對(duì)象被創(chuàng)建的時(shí)候做一些定制化的、初始化的工作。舉個(gè)例子,比如你的class里有個(gè)成員是:
private List<Member> memebers;
你想統(tǒng)一一下getMembers()的行為,也就是說(shuō),不管有沒(méi)有member,都返回一個(gè)List對(duì)象,而不是時(shí)而為null,時(shí)而為L(zhǎng)ist<Member>,給Caller添麻煩。
那么就在構(gòu)造函數(shù)里解決這個(gè)問(wèn)題,加一行代碼比如:
this.members = new ArrayList<Member>();
這樣子,即便這個(gè)對(duì)象剛剛被new出來(lái),在上面調(diào)用getMembers也不會(huì)返回null。