<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          零基礎(chǔ)學(xué)Java第16講:對象和類

          共 5347字,需瀏覽 11分鐘

           ·

          2020-11-21 03:58

          同學(xué)們好啊,我是沉默王二。又到了《零基礎(chǔ)學(xué) Java》的時間,我很開心,你很期待,有木有?這是《零基礎(chǔ)學(xué) Java》專欄的第 16 篇文章,我們來談?wù)劇癑ava 中的對象和類”。

          強(qiáng)烈推薦:我在 GitHub 上發(fā)現(xiàn)了一個寶藏項(xiàng)目,里面收錄了 500+ 本電子書,包含 Java、Spring、MySQL、設(shè)計(jì)模式、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)與算法、面試題等方面的電子書,需要的小伙伴可以在后臺回復(fù)「Java」關(guān)鍵字獲取。

          “二哥,我那天在圖書館復(fù)習(xí)上一節(jié)你講的內(nèi)容,剛好碰見一個學(xué)長,他問我有沒有‘對象’,我說還沒有啊。結(jié)果你猜他說什么,‘要不要我給你 new 一個?。俊耶?dāng)時就懵了,new 是啥意思啊,二哥?”三妹滿是疑惑的問我。

          “哈哈,三妹,你學(xué)長還挺幽默啊。new 是 Java 中的一個關(guān)鍵字,用來把類變成對象?!蔽倚χ鴮θ谜f,“對象和類是 Java 中最基本的兩個概念,可以說撐起了面向?qū)ο缶幊蹋∣OP)的一片天?!?/p>

          01、面向過程和面向?qū)ο?span style="display: none;">

          三妹是不是要問,什么是 OOP?

          OOP 的英文全稱是 Object Oriented Programming,要理解它的話,就要先理解面向?qū)ο?,要想理解面向?qū)ο蟮脑?,就要先理解面向過程,因?yàn)橐婚_始沒有面向?qū)ο蟮木幊陶Z言,都是面向過程。

          舉個簡單點(diǎn)的例子來區(qū)分一下面向過程和面向?qū)ο蟆?/p>

          有一天,你想吃小碗湯了,怎么辦呢?有兩個選擇:

          1)自己買食材,豆腐皮啊、肉啊、蒜苔啊等等,自己動手做。

          2)到飯店去,只需要對老板喊一聲,“來份小碗湯。”

          第一種就是面向過程,第二種就是面向?qū)ο蟆?/p>

          面向過程有什么劣勢呢?假如你買了小碗湯的食材,臨了又想吃宮保雞丁了,你是不是還得重新買食材?

          面向?qū)ο笥惺裁磧?yōu)勢呢?假如你不想吃小碗湯了,你只需要對老板說,“我那個小碗湯如果沒做的話,換成宮保雞丁吧!”

          面向過程是流程化的,一步一步,上一步做完了,再做下一步。

          面向?qū)ο笫悄K化的,我做我的,你做你的,我需要你做的話,我就告訴你一聲。我不需要知道你到底怎么做,只看功勞不看苦勞。

          不過,如果追到底的話,面向?qū)ο蟮牡讓悠鋵?shí)還是面向過程,只不過把面向過程進(jìn)行了抽象化,封裝成了類,方便我們的調(diào)用。

          02、類

          對象可以是現(xiàn)實(shí)中看得見的任何物體,比如說,一只特立獨(dú)行的豬;也可以是想象中的任何虛擬物體,比如說能七十二變的孫悟空。

          Java 通過類(class)來定義這些物體,這些物體有什么狀態(tài),通過字段來定義,比如說比如說豬的顏色是純色還是花色;這些物體有什么行為,通過方法來定義,比如說豬會吃,會睡覺。

          來,定義一個簡單的類給你看看。

          /**
          ?*?微信搜索「沉默王二」,回復(fù)?Java
          ?*
          ?*?@author?沉默王二
          ?*?@date?2020/11/19
          ?*/

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????private?void?eat()?{
          ????}

          ????private?void?sleep()?{
          ????}

          ????private?void?dadoudou()?{
          ????}
          }

          一個類可以包含:

          • 字段(Filed)
          • 方法(Method)
          • 構(gòu)造方法(Constructor)

          在 Person 類中,字段有 3 個,分別是 name、age 和 sex,它們也稱為成員變量——在類內(nèi)部但在方法外部,方法內(nèi)部的叫臨時變量。

          成員變量有時候也叫做實(shí)例變量,在編譯時不占用內(nèi)存空間,在運(yùn)行時獲取內(nèi)存,也就是說,只有在對象實(shí)例化(new Person())后,字段才會獲取到內(nèi)存,這也正是它被稱作“實(shí)例”變量的原因。

          方法 3 個,分別是 eat()、sleep()dadoudou(),表示 Person 這個對象可以做什么,也就是吃飯睡覺打豆豆。

          那三妹是不是要問,“怎么沒有構(gòu)造方法呢?”

          的確在 Person 類的源碼文件(.java)中沒看到,但在反編譯后的字節(jié)碼文件(.class)中是可以看得到的。

          //
          //?Source?code?recreated?from?a?.class?file?by?IntelliJ?IDEA
          //?(powered?by?Fernflower?decompiler)
          //

          package?com.itwanger.twentythree;

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????public?Person()?{
          ????}

          ????private?void?eat()?{
          ????}

          ????private?void?sleep()?{
          ????}

          ????private?void?dadoudou()?{
          ????}
          }

          public Person(){} 就是默認(rèn)的構(gòu)造方法,因?yàn)槭强盏臉?gòu)造方法(方法體中沒有內(nèi)容),所以可以缺省。Java 聰明就聰明在這,有些很死板的代碼不需要開發(fā)人員添加,它會偷偷地做了。

          03、new 一個對象

          創(chuàng)建 Java 對象時,需要用到 new 關(guān)鍵字。

          Person?person?=?new?Person();

          這行代碼就通過 Person 類創(chuàng)建了一個 Person 對象。所有對象在創(chuàng)建的時候都會在堆內(nèi)存中分配空間。

          創(chuàng)建對象的時候,需要一個 main() 方法作為入口, main() 方法可以在當(dāng)前類中,也可以在另外一個類中。

          第一種:main() 方法直接放在 Person 類中。

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????private?void?eat()?{}
          ????private?void?sleep()?{}
          ????private?void?dadoudou()?{}

          ????public?static?void?main(String[]?args)?{
          ????????Person?person?=?new?Person();
          ????????System.out.println(person.name);
          ????????System.out.println(person.age);
          ????????System.out.println(person.sex);
          ????}
          }

          輸出結(jié)果如下所示:

          null
          0
          0

          第二種:main() 方法不在 Person 類中,而在另外一個類中。

          實(shí)際開發(fā)中,我們通常不在當(dāng)前類中直接創(chuàng)建對象并使用它,而是放在使用對象的類中,比如說上圖中的 PersonTest 類。

          可以把 PersonTest 類和 Person 類放在兩個文件中,也可以放在一個文件(命名為 PersonTest.java)中,就像下面這樣。

          /**
          ?*?@author?微信搜「沉默王二」,回復(fù)關(guān)鍵字?PDF
          ?*/

          public?class?PersonTest?{
          ????public?static?void?main(String[]?args)?{
          ????????Person?person?=?new?Person();
          ????}
          }

          class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????private?void?eat()?{}
          ????private?void?sleep()?{}
          ????private?void?dadoudou()?{}
          }

          04、初始化對象

          在之前的例子中,程序輸出結(jié)果為:

          null
          0
          0

          為什么會有這樣的輸出結(jié)果呢?因?yàn)?Person 對象沒有初始化,因此輸出了 String 的默認(rèn)值 null,int 的默認(rèn)值 0。

          那怎么初始化 Person 對象(對字段賦值)呢?

          第一種:通過對象的引用變量。

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????public?static?void?main(String[]?args)?{
          ????????Person?person?=?new?Person();
          ????????person.name?=?"沉默王二";
          ????????person.age?=?18;
          ????????person.sex?=?1;
          ????????
          ????????System.out.println(person.name);
          ????????System.out.println(person.age);
          ????????System.out.println(person.sex);
          ????}
          }

          person 被稱為對象 Person 的引用變量,見下圖:

          通過對象的引用變量,可以直接對字段進(jìn)行初始化(person.name = "沉默王二"),所以以上代碼輸出結(jié)果如下所示:

          沉默王二
          18
          1

          第二種:通過方法初始化。

          /**
          ?*?@author?沉默王二,一枚有趣的程序員
          ?*/

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

          ????public?void?initialize(String?n,?int?a,?int?s)?{
          ????????name?=?n;
          ????????age?=?a;
          ????????sex?=?s;
          ????}

          ????public?static?void?main(String[]?args)?{
          ????????Person?person?=?new?Person();
          ????????person.initialize("沉默王二",18,1);

          ????????System.out.println(person.name);
          ????????System.out.println(person.age);
          ????????System.out.println(person.sex);
          ????}
          }

          在 Person 類中新增方法 initialize(),然后在新建對象后傳參進(jìn)行初始化(person.initialize("沉默王二", 18, 1))。

          第三種:通過構(gòu)造方法初始化。

          /**
          ?*?@author?沉默王二,一枚有趣的程序員
          ?*/

          public?class?Person?{
          ????private?String?name;
          ????private?int?age;
          ????private?int?sex;

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

          ????public?static?void?main(String[]?args)?{
          ????????Person?person?=?new?Person("沉默王二",?18,?1);

          ????????System.out.println(person.name);
          ????????System.out.println(person.age);
          ????????System.out.println(person.sex);
          ????}
          }

          這也是最標(biāo)準(zhǔn)的一種做法,直接在 new 的時候把參數(shù)傳遞過去。

          補(bǔ)充一點(diǎn)知識,匿名對象。匿名對象意味著沒有引用變量,它只能在創(chuàng)建的時候被使用一次。

          new?Person();

          可以直接通過匿名對象調(diào)用方法:

          new?Person().initialize("沉默王二",?18,?1);

          “好了,三妹,關(guān)于 Java 中的對象和類就先說這么多吧?!鞭D(zhuǎn)動了一下僵硬的脖子后,我對三妹說。

          “好的,二哥,你辛苦了,我來給你按摩下?!?/p>

          強(qiáng)調(diào)一下,《零基礎(chǔ)學(xué) Java》面向的是零基礎(chǔ)的 Java 學(xué)習(xí)者,我希望能幫助同學(xué)們輕松邁進(jìn)編程世界的大門,為后續(xù)的深入學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。

          另外,我特意為大家創(chuàng)建了「技術(shù)交流群」,群里氛圍真的很不錯,希望能給需要的 同學(xué)再多一點(diǎn)幫助。掃描下方我的二維碼,回復(fù)「Java」我拉你入群。

          示例代碼已經(jīng)同步到 GitHub,地址為 github.com/itwanger,也可以點(diǎn)擊閱讀原文進(jìn)行跳轉(zhuǎn),歡迎 star。

          瀏覽 48
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人视频在线观看视频在线观看黄色 | 亚洲人妻av | 美女黄片 | 手机无码在线 | 久久99国产精品视频 |