Java是通過(guò)什么機(jī)制來(lái)確保對(duì)象初始化呢?-創(chuàng)新互聯(lián)

在 Java 中,無(wú)論是對(duì)象,還是基本類型,都不允許在未經(jīng)初始化的情況下使用它們;否則,Java 編譯器就會(huì)熱情地提醒你——請(qǐng)初始化后再使用。

成都創(chuàng)新互聯(lián)公司-云計(jì)算及IDC服務(wù)提供商,涵蓋公有云、IDC機(jī)房租用、四川主機(jī)托管、等保安全、私有云建設(shè)等企業(yè)級(jí)互聯(lián)網(wǎng)基礎(chǔ)服務(wù),咨詢電話:18982081108

那,Java 是通過(guò)什么機(jī)制來(lái)確保對(duì)象初始化呢?

答案就是“構(gòu)造器”——類的對(duì)象要被正確的初始化,就必須先過(guò)構(gòu)造器這一關(guān)。

程序清單1-1:一個(gè)帶有構(gòu)造器的簡(jiǎn)單類

class?Writer?{
public?Writer()?{
System.out.println("我是一名寫(xiě)作愛(ài)好者");
}

public?static?void?main(String[]?args)?{
new?Writer();
}
}

當(dāng)使用關(guān)鍵字 new 來(lái)創(chuàng)建一個(gè)對(duì)象 Writer 時(shí),就會(huì)調(diào)用構(gòu)造器(與類名 Writer 相同的方法Writer())進(jìn)行初始化,因此上述程序就會(huì)輸出“我是一名寫(xiě)作愛(ài)好者”。

構(gòu)造方法Writer()沒(méi)有參數(shù),因此被稱為無(wú)參構(gòu)造器;事實(shí)上,無(wú)參構(gòu)造器是可以省略的——編譯器會(huì)自動(dòng)創(chuàng)建一個(gè)無(wú)參構(gòu)造器,被稱為“默認(rèn)構(gòu)造器”(Java 設(shè)計(jì)者真的無(wú)比明智啊——幫助程序員省去了創(chuàng)建默認(rèn)構(gòu)造器的麻煩)。

程序清單1-2:默認(rèn)構(gòu)造器

class?Writer?{
public?static?void?main(String[]?args)?{
new?Writer();
}
}

默認(rèn)構(gòu)造器并不會(huì)一直“默認(rèn)”存在,如果已經(jīng)定義了一個(gè)構(gòu)造器,無(wú)論有參還是無(wú)參,編譯器將不再自動(dòng)創(chuàng)建默認(rèn)構(gòu)造器。

程序清單1-3:不會(huì)一直存在的默認(rèn)構(gòu)造器

class?Writer?{
public?Writer(String?name)?{
System.out.println(name?+?"是一名寫(xiě)作愛(ài)好者");
}

public?static?void?main(String[]?args)?{
new?Writer();
new?Writer("沉默王二");
}
}

一旦定義了一個(gè)有參構(gòu)造器,那么在創(chuàng)建對(duì)象的時(shí)候就必須傳遞構(gòu)造器需要的參數(shù),否則編譯器會(huì)提示“The constructor Writer() is undefined”(使用new Writer()創(chuàng)建對(duì)象對(duì))——這樣做的好處就是,確保對(duì)象在初始化的時(shí)候符合類設(shè)計(jì)的初衷(上例中,Writer 需要指定作者姓名,所以你在創(chuàng)建 Writer 對(duì)象時(shí)不能不傳遞作者姓名)。

讀王小波的《沉默的大多數(shù)》,我喜歡上了一句話:“參差不齊乃幸福本源”。王小波的意思可能是想說(shuō):一個(gè)能容忍不同觀點(diǎn)與不同的生活方式的社會(huì),才是一個(gè)幸福的社會(huì)。那么,在 Java 的世界里,也有一個(gè)幸福的社會(huì)。

由于構(gòu)造器的特殊性(不能與其他成員方法的名字沖突),導(dǎo)致構(gòu)造器的名字必須和類名保持一致,也就是說(shuō),一個(gè)類,只能有一個(gè)構(gòu)造器名。這似乎局限了構(gòu)造器的使用方式。但其實(shí)不然,Java 允許方法重載——可以只有一個(gè)方法名,但方法的參數(shù)列表可不盡相同;哎,問(wèn)題就這么巧妙的解決了。

程序清單2-1:構(gòu)造方法的重載

class?Writer?{
private?String?name;
private?String?bookName;

public?Writer(String?name)?{
this.name?=?name;
System.out.println(name?+?"是一名寫(xiě)作愛(ài)好者");
}

public?Writer(String?name,?String?bookName)?{
this.name?=?name;
this.bookName?=?bookName;

System.out.println(name?+?"不僅是一名寫(xiě)作愛(ài)好者,還出版了書(shū)籍"?+?bookName);
}

public?static?void?main(String[]?args)?{
new?Writer("沉默王二");
new?Writer("沉默王三",?"《Web全棧開(kāi)發(fā)進(jìn)階之路》");
}
}

你看,沉默王二沒(méi)出版書(shū)籍,可以是一名寫(xiě)作愛(ài)好者;沉默王三雖然出版了書(shū)籍《Web全棧開(kāi)發(fā)進(jìn)階之路》,但仍然和王二是好兄弟,并沒(méi)有看不起王二(從來(lái)沒(méi)說(shuō)過(guò):“王二,你個(gè)渣渣,連本書(shū)都沒(méi)有出版,好意思說(shuō)自己是寫(xiě)作愛(ài)好者?”)。是不是很和諧?

Java 該如何區(qū)分重載方法(畢竟參數(shù)名相同)呢?上例中,你也看到了,參數(shù)個(gè)數(shù)的不同就可以區(qū)分;另外,參數(shù)的類型和順序(不建議使用,因?yàn)檫@樣做會(huì)讓代碼難以維護(hù),見(jiàn)下例)也可以用來(lái)作為區(qū)分的條件。

程序清單2-2:難以維護(hù)的方法重載(靠順序,別這樣?。?/p>

class?Writer?{
private?String?name;
private?int?age;

public?Writer(String?name,?int?age)?{
this.name?=?name;
this.age?=?age;
}

public?Writer(int?age,?String?name)?{
this.age?=?age;
this.name?=?name;
}
}

上一篇:Java 流程控制語(yǔ)句

下一篇:Java 訪問(wèn)權(quán)限控制:public、private、protected

微信搜索「沉默王二」公眾號(hào),關(guān)注后回復(fù)「免費(fèi)視頻」獲取 500G Java 高質(zhì)量教學(xué)視頻(已分門別類)。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。

名稱欄目:Java是通過(guò)什么機(jī)制來(lái)確保對(duì)象初始化呢?-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article6/dpipig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)