日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

嬰兒的出生為你解惑構(gòu)造函數(shù)和構(gòu)造代碼塊

 長(zhǎng)沙7喜 2019-07-02

腳本之家

你與百萬(wàn)開(kāi)發(fā)者在一起

序言:         

今天回想這幾天走過(guò)的Java路程,發(fā)現(xiàn)漏了一個(gè)點(diǎn),就是構(gòu)造代碼塊,我絞盡腦汁,也沒(méi)想起來(lái)它的作用,我騙不了我自己,就搜相關(guān)資料,重新學(xué)習(xí),在學(xué)習(xí)的過(guò)程中發(fā)現(xiàn)構(gòu)造代碼塊和構(gòu)造函數(shù)有一定的聯(lián)系,為了捕捉這種聯(lián)系,我總結(jié)了一個(gè)案例,這個(gè)案例能加深你對(duì)構(gòu)造函數(shù)和構(gòu)造代碼塊的理解。我寫這個(gè)博客一是為了避免下次再被構(gòu)造代碼塊這塊石頭絆倒,二是為了能給需要解惑的人提供一些幫助,還是那句話:

越懂得與人分享,你的價(jià)值增值越大!

看代碼前要先明白一個(gè)需求:

使用Java類描述一個(gè)嬰兒,假設(shè)現(xiàn)在兩種嬰兒,一種嬰兒是一出生就有了名字,我們把這種嬰兒叫白戶,另一種嬰兒是出生后才有了名字,我們把這種嬰兒叫黑戶。(為了方便理解,我把剛出生就已經(jīng)有名字的叫白戶,把出生后才起名的叫黑戶

  1. //嬰兒類public class Baby {

  2.     int id;//身份證

  3.     String name;//名字

  4.     //哭

  5.     public void cry(){

  6.         System.out.println(name+'哇哇的哭。。。。');

  7.     }

  8. }

  9. class Test{

  10.     public static void main(String[] args) {

  11.         //創(chuàng)建一個(gè)baby對(duì)象

  12.         Baby baby = new Baby();//嬰兒出生

  13.         baby.id=111;

  14.         baby.name='小娃娃';//黑戶

  15.         baby.cry();

  16.     }

  17. }

運(yùn)行結(jié)果:  

小娃娃哇哇的哭。。。。

由于小娃娃是出生之后才賦的值,所以小娃娃是黑戶,我們現(xiàn)在要讓嬰兒一出生就有名字,就要用構(gòu)造函數(shù)。

構(gòu)造函數(shù)的作用:    給對(duì)應(yīng)的對(duì)象進(jìn)行初始化

構(gòu)造函數(shù)定義的格式:

  1. 修飾符 函數(shù)名(形式參數(shù)){

  2.      函數(shù)體。。。

  3. }

構(gòu)造函數(shù)要注意的細(xì)節(jié):

1.構(gòu)造函數(shù)沒(méi)有返回值類型

2.構(gòu)造函數(shù)的函數(shù)名必須要與類名一致

3.構(gòu)造函數(shù)并不是由我們手動(dòng)調(diào)用的,而是在創(chuàng)建對(duì)應(yīng)的對(duì)象時(shí),jvm就會(huì)主動(dòng)調(diào)用到對(duì)應(yīng)的構(gòu)造函數(shù)

4.如果一個(gè)類沒(méi)有顯式的寫上一個(gè)構(gòu)造方法時(shí),Java編譯器會(huì)為該類添加一個(gè)無(wú)參的構(gòu)造方法

5.如果一個(gè)類已經(jīng)顯示的寫上一個(gè)構(gòu)造方法時(shí),Java編譯器不會(huì)再為該類添加無(wú)參的構(gòu)造方法

6.構(gòu)造函數(shù)是可以在一個(gè)類中以函數(shù)重載的形式存在多個(gè)的

  1. //嬰兒類

  2. public class Baby {

  3.     int id;//身份證

  4.     String name;//名字

  5.     //無(wú)參構(gòu)造函數(shù)

  6.     public  Baby(){

  7.     }

  8.     //有參構(gòu)造函數(shù)

  9.     public Baby(int id, String name) {

  10.         this.id = id;

  11.         this.name = name;

  12.         System.out.println('Baby的屬性初始化完畢?。?!');

  13.     }

  14.     //哭

  15.     public void cry(){

  16.         System.out.println(this.name+'哇哇的哭。。。。');

  17.     }

  18. }

  19. class Test{

  20.     public static void main(String[] args) {

  21.         //創(chuàng)建一個(gè)baby對(duì)象

  22.         Baby baby = new Baby(222,'小可愛(ài)');//嬰兒出生    白戶

  23.         baby.cry();

  24.     }

  25. }

運(yùn)行結(jié)果:

Baby的屬性初始化完畢?。?!

小可愛(ài)哇哇的哭。。。。

通過(guò)上面的黑戶和白戶,我們能對(duì)構(gòu)造函數(shù)有個(gè)深刻的理解,下面我再引申出構(gòu)造代碼塊,依舊是這個(gè)例子,但是需求變了,現(xiàn)在的需求是嬰兒一出生就必須哭,可能說(shuō)到這,要是有人理解了上面的代碼,肯定馬上就能想到,這還不簡(jiǎn)單,把哭的方法寫到構(gòu)造函數(shù)中不就行了,對(duì),這樣確實(shí)也可以,但是有弊端,Java要求代碼簡(jiǎn)練,能少寫的就不多寫,你先看下面的代碼就知道了

  1. //嬰兒類

  2. public class Baby {

  3.     int id;//身份證

  4.     String name;//名字

  5.     //無(wú)參構(gòu)造函數(shù)

  6.     public  Baby(){

  7.         cry();

  8.     }

  9.     //有參構(gòu)造函數(shù)

  10.     public Baby(int id, String name) {

  11.         this.id = id;

  12.         this.name = name;

  13.         cry();

  14.     }

  15.     //哭

  16.     public void cry(){

  17.         System.out.println('哇哇的哭。。。。');

  18.     }

  19. }

  20. class Test{

  21.     public static void main(String[] args) {

  22.         //創(chuàng)建一個(gè)白戶baby對(duì)象

  23.         Baby baby = new Baby(222,'小可愛(ài)');//白戶

  24.         //創(chuàng)建一個(gè)黑戶baby對(duì)象

  25.         Baby baby1 = new Baby();//黑戶

  26.     }

  27. }

運(yùn)行結(jié)果:

哇哇的哭。。。。

哇哇的哭。。。。

雖然白戶黑戶兩種嬰兒都在出生的時(shí)候哭了,但是在兩個(gè)構(gòu)造函數(shù)中出現(xiàn)了重復(fù)代碼,cry()方法重復(fù)了兩次,為了解決重復(fù)代碼這個(gè)問(wèn)題,下面就讓構(gòu)造代碼塊出場(chǎng)吧!

構(gòu)造函數(shù)的作用:給對(duì)應(yīng)的對(duì)象進(jìn)行初始化

構(gòu)造代碼塊的作用:  給對(duì)象進(jìn)行統(tǒng)一的初始化

構(gòu)造代碼塊的格式:

  1. {

  2.     構(gòu)造代碼塊

  3. }

注意:構(gòu)造代碼塊的大括號(hào)必須位于成員位置上

代碼塊的類別:

1.構(gòu)造代碼塊

2.局部代碼塊        大括號(hào)位于方法之內(nèi)       作用:縮短局部變量的生命周期,節(jié)省一點(diǎn)點(diǎn)內(nèi)存

3.靜態(tài)代碼塊

  1. static{

  2.      靜態(tài)代碼塊

  3. }

構(gòu)造代碼塊要注意的事項(xiàng):

1.Java編譯器編譯一個(gè)Java源文件的時(shí)候,會(huì)把成員變量的聲明語(yǔ)句提前至一個(gè)類的最前端

2.成員變量的初始化工作其實(shí)都是在構(gòu)造函數(shù)中進(jìn)行的

3.一旦經(jīng)過(guò)Java編譯器編譯后,構(gòu)造代碼塊的代碼就會(huì)被移動(dòng)到構(gòu)造函數(shù)中執(zhí)行,是在構(gòu)造函數(shù)之前執(zhí)行的,構(gòu)造函數(shù)中的代碼是最后執(zhí)行的

4.成員變量的顯式初始化與構(gòu)造代碼塊的代碼是按照當(dāng)前代碼的順序執(zhí)行的

  1. //嬰兒類

  2. public class Baby {

  3.     int id;//身份證

  4.     String name;//名字

  5.     //構(gòu)造代碼塊

  6.     {

  7.         cry();

  8.     }

  9.     //無(wú)參構(gòu)造函數(shù)

  10.     public  Baby(){

  11.     }

  12.     //有參構(gòu)造函數(shù)

  13.     public Baby(int id, String name) {

  14.         this.id = id;

  15.         this.name = name;

  16.     }

  17.     //哭

  18.     public void cry(){

  19.         System.out.println('哇哇的哭。。。。');

  20.     }

  21. }

  22. class Test{

  23.     public static void main(String[] args) {

  24.         //創(chuàng)建一個(gè)白戶baby對(duì)象

  25.         Baby baby = new Baby(222,'小可愛(ài)');//白戶

  26.         //創(chuàng)建一個(gè)黑戶baby對(duì)象

  27.         Baby baby1 = new Baby();//黑戶

  28.         //匿名對(duì)象

  29.         new Baby();

  30.     }

  31. }  

運(yùn)行結(jié)果:

哇哇的哭。。。。

哇哇的哭。。。。

哇哇的哭。。。。

  1. //嬰兒類

  2. public class Baby {

  3.     int id;//身份證

  4.     String name;//名字

  5.     //構(gòu)造代碼塊

  6.     {

  7.         cry();

  8.     }

  9.     //無(wú)參構(gòu)造函數(shù)

  10.     public  Baby(){

  11.     }

  12.     //有參構(gòu)造函數(shù)

  13.     public Baby(int id, String name) {

  14.         this.id = id;

  15.         this.name = name;

  16.     }

  17.     //哭

  18.     public void cry(){

  19.         System.out.println('哇哇的哭。。。。');

  20.     }

  21. }

  22. class Test{

  23.     public static void main(String[] args) {

  24.         //局部代碼塊

  25.         {

  26.             //創(chuàng)建一個(gè)白戶baby對(duì)象

  27.             Baby baby = new Baby(222,'小可愛(ài)');//白戶

  28.             //創(chuàng)建一個(gè)黑戶baby對(duì)象

  29.             Baby baby1 = new Baby();//黑戶

  30.             //匿名對(duì)象

  31.             new Baby();

  32.         }

  33.     }

  34. }

本文作者:泰斗賢若如

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多