這篇文章主要介紹“如何理解構(gòu)造函數(shù)和構(gòu)造代碼塊”,在日常操作中,相信很多人在如何理解構(gòu)造函數(shù)和構(gòu)造代碼塊問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解構(gòu)造函數(shù)和構(gòu)造代碼塊”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、回民網(wǎng)絡(luò)推廣、微信小程序開發(fā)、回民網(wǎng)絡(luò)營銷、回民企業(yè)策劃、回民品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供回民建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:chinadenli.net
前言:
構(gòu)造代碼塊和構(gòu)造函數(shù)之間是有一定的聯(lián)系的,為了捕捉這種聯(lián)系關(guān)系,我總結(jié)了一個案例,這個案例能加深你對構(gòu)造函數(shù)和構(gòu)造代碼塊的理解。
看代碼前要先明白一個需求:
使用Java類描述一個嬰兒,假設(shè)現(xiàn)在兩種嬰兒,一種嬰兒是一出生就有了名字,我們把這種嬰兒叫白戶,另一種嬰兒是出生后才有了名字,我們把這種嬰兒叫黑戶。(為了方便理解,我把剛出生就已經(jīng)有名字的叫白戶,把出生后才起名的叫黑戶)
//嬰兒類public class Baby { int id;//身份證 String name;//名字 //哭 public void cry(){ System.out.println(name+"哇哇的哭。。。。"); } } class Test{ public static void main(String[] args) { //創(chuàng)建一個baby對象 Baby baby = new Baby();//嬰兒出生 baby.id=111; baby.name="小娃娃";//黑戶 baby.cry(); } } ??
運行結(jié)果:
小娃娃哇哇的哭。。。。
由于小娃娃是出生之后才賦的值,所以小娃娃是黑戶,我們現(xiàn)在要讓嬰兒一出生就有名字,就要用構(gòu)造函數(shù)。
構(gòu)造函數(shù)的作用: 給對應(yīng)的對象進(jìn)行初始化
構(gòu)造函數(shù)定義的格式:
修飾符 函數(shù)名(形式參數(shù)){ 函數(shù)體。。。 }
構(gòu)造函數(shù)要注意的細(xì)節(jié):
1.構(gòu)造函數(shù)沒有返回值類型
2.構(gòu)造函數(shù)的函數(shù)名必須要與類名一致
3.構(gòu)造函數(shù)并不是由我們手動調(diào)用的,而是在創(chuàng)建對應(yīng)的對象時,jvm就會主動調(diào)用到對應(yīng)的構(gòu)造函數(shù)
4.如果一個類沒有顯式的寫上一個構(gòu)造方法時,Java編譯器會為該類添加一個無參的構(gòu)造方法
5.如果一個類已經(jīng)顯示的寫上一個構(gòu)造方法時,Java編譯器不會再為該類添加無參的構(gòu)造方法
6.構(gòu)造函數(shù)是可以在一個類中以函數(shù)重載的形式存在多個的
//嬰兒類 public class Baby { int id;//身份證 String name;//名字 //無參構(gòu)造函數(shù) public Baby(){ } //有參構(gòu)造函數(shù) public Baby(int id, String name) { this.id = id; this.name = name; System.out.println("Baby的屬性初始化完畢?。?!"); } //哭 public void cry(){ System.out.println(this.name+"哇哇的哭。。。。"); } } class Test{ public static void main(String[] args) { //創(chuàng)建一個baby對象 Baby baby = new Baby(222,"小可愛");//嬰兒出生 白戶 baby.cry(); } } ?
運行結(jié)果:
Baby的屬性初始化完畢!!!
小可愛哇哇的哭。。。。
通過上面的黑戶和白戶,我們能對構(gòu)造函數(shù)有個深刻的理解,下面我再引申出構(gòu)造代碼塊,依舊是這個例子,但是需求變了,現(xiàn)在的需求是嬰兒一出生就必須哭,可能說到這,要是有人理解了上面的代碼,肯定馬上就能想到,這還不簡單,把哭的方法寫到構(gòu)造函數(shù)中不就行了,對,這樣確實也可以,但是有弊端,Java要求代碼簡練,能少寫的就不多寫,你先看下面的代碼就知道了。
//嬰兒類 public class Baby { int id;//身份證 String name;//名字 //無參構(gòu)造函數(shù) public Baby(){ cry(); } //有參構(gòu)造函數(shù) public Baby(int id, String name) { this.id = id; this.name = name; cry(); } //哭 public void cry(){ System.out.println("哇哇的哭。。。。"); } } class Test{ public static void main(String[] args) { //創(chuàng)建一個白戶baby對象 Baby baby = new Baby(222,"小可愛");//白戶 //創(chuàng)建一個黑戶baby對象 Baby baby1 = new Baby();//黑戶 } } ??
運行結(jié)果:
哇哇的哭。。。。
哇哇的哭。。。。
雖然白戶黑戶兩種嬰兒都在出生的時候哭了,但是在兩個構(gòu)造函數(shù)中出現(xiàn)了重復(fù)代碼,cry() 方法重復(fù)了兩次,為了解決重復(fù)代碼這個問題,下面就讓構(gòu)造代碼塊出場吧!
構(gòu)造函數(shù)的作用:給對應(yīng)的對象進(jìn)行初始化
構(gòu)造代碼塊的作用: 給對象進(jìn)行統(tǒng)一的初始化
構(gòu)造代碼塊的格式:
{ 構(gòu)造代碼塊 }
注意:構(gòu)造代碼塊的大括號必須位于成員位置上
代碼塊的類別:
1.構(gòu)造代碼塊
2.局部代碼塊
大括號位于方法之內(nèi)
作用:縮短局部變量的生命周期,節(jié)省一點點內(nèi)存。
3.靜態(tài)代碼塊
{ 靜態(tài)代碼塊 }
構(gòu)造代碼塊要注意的事項:
1.Java編譯器編譯一個Java源文件的時候,會把成員變量的聲明語句提前至一個類的最前端
2.成員變量的初始化工作其實都是在構(gòu)造函數(shù)中進(jìn)行的
3.一旦經(jīng)過Java編譯器編譯后,構(gòu)造代碼塊的代碼就會被移動到構(gòu)造函數(shù)中執(zhí)行,是在構(gòu)造函數(shù)之前執(zhí)行的,構(gòu)造函數(shù)中的代碼是最后執(zhí)行的
4.成員變量的顯式初始化與構(gòu)造代碼塊的代碼是按照當(dāng)前代碼的順序執(zhí)行的
//嬰兒類 public class Baby { int id;//身份證 String name;//名字 //構(gòu)造代碼塊 { cry(); } //無參構(gòu)造函數(shù) public Baby(){ } //有參構(gòu)造函數(shù) public Baby(int id, String name) { this.id = id; this.name = name; } //哭 public void cry(){ System.out.println("哇哇的哭。。。。"); } } class Test{ public static void main(String[] args) { //創(chuàng)建一個白戶baby對象 Baby baby = new Baby(222,"小可愛");//白戶 //創(chuàng)建一個黑戶baby對象 Baby baby1 = new Baby();//黑戶 //匿名對象 new Baby(); } }?? ?
運行結(jié)果:
哇哇的哭。。。。
哇哇的哭。。。。
哇哇的哭。。。。
//嬰兒類 public class Baby { int id;//身份證 String name;//名字 //構(gòu)造代碼塊 { cry(); } //無參構(gòu)造函數(shù) public Baby(){ } //有參構(gòu)造函數(shù) public Baby(int id, String name) { this.id = id; this.name = name; } //哭 public void cry(){ System.out.println("哇哇的哭。。。。"); } } class Test{ public static void main(String[] args) { //局部代碼塊 { //創(chuàng)建一個白戶baby對象 Baby baby = new Baby(222,"小可愛");//白戶 //創(chuàng)建一個黑戶baby對象 Baby baby1 = new Baby();//黑戶 //匿名對象 new Baby(); } } } ?
到此,關(guān)于“如何理解構(gòu)造函數(shù)和構(gòu)造代碼塊”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞名稱:如何理解構(gòu)造函數(shù)和構(gòu)造代碼塊
標(biāo)題來源:http://chinadenli.net/article2/jgijic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站排名、云服務(wù)器、網(wǎng)站策劃、商城網(wǎng)站、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)