Java基礎(chǔ)day05筆記:面向?qū)ο蟾攀鰘類與對象|成員變量和局部變量|匿名對象|封裝|構(gòu)造函數(shù)|構(gòu)造代碼塊|this關(guān)鍵字

劃重點~面向?qū)ο?/b>。要進入主題啦。

????01-面向?qū)ο?概述)

? ? ? ? 面向?qū)ο笫且环N思想。

? ? ? ? 早期的思想是面向過程,思想有一個演變形式,慢慢演變成了面向?qū)ο?。面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。

? ? ? ? 通過一個例子來說明:

? ? ? ? 把大象放進冰箱里。

? ? ? ? 步驟:

? ? ? ? 1,打開冰箱門。

? ? ? ? 2,把大象放進去。

? ? ? ? 3,關(guān)上冰箱門。

? ? ? ? 我們在強調(diào)過程。這個是一個標準的面向過程的思想,注重的是這個過程中的行為。

? ? ? ? 既然打開、存放、關(guān)閉,都是冰箱的行為,我們就把這些行為全部定義到冰箱中,讓冰箱來完成。冰箱是一個實實在在存在的東西,我們把它叫做對象。 ? ? ? ?

面向過程
面向?qū)ο?/div>

? ? ? ? 面向?qū)ο?,將?fù)雜的問題變得簡單了。以前要考慮那么多步驟,現(xiàn)在考慮一個對象就好啦。我們的角色也發(fā)生了變化,從以前的執(zhí)行者變成了現(xiàn)在的指揮者。

? ? ? ? 雖然現(xiàn)在有了面向?qū)ο螅嫦蜻^程還是存在的,它的存在是有道理的。面向過程是面向?qū)ο蟮幕A(chǔ)。

????02-面向?qū)ο?舉例)

? ? ? ? 買電腦

? ? ? ? 面向過程:去買之前會在網(wǎng)上做很多功課,了解什么CPU好、什么顯卡好之類的。

? ? ? ? 面向?qū)ο螅赫乙粋€懂行的朋友,幫你去判斷 、幫你去砍價,你只需要最后付錢。這個過程你不需要了解其中什么硬件好,不用你自己去做,只要執(zhí)行朋友的判斷功能、朋友的砍價功能就好。

? ? ? ? 從執(zhí)行者變成指揮者。

? ? ? ? 軟件公司

? ? ? ? 老板就是用面向?qū)ο蟮乃枷雭硭伎紗栴},他在尋找具有編程能力的人來完成編程的任務(wù),而不是自己親力親為編所有的代碼。

? ? ? ? 而求職者就是那個對象。老板指揮員工做事情,老板在使用員工所具有的編程功能,為公司創(chuàng)造價值。

? ? ? ? 餐廳

? ? ? ? 服務(wù)員、廚師、收銀員等等,都是對象,具有各自的功能。


? ? ? ? 當然,對象不單單指人。在Java中,萬物皆對象。我們可以把現(xiàn)實生活中所有東西看做一個對象。 ? ? ? ?

? ? ? ? 面向?qū)ο罂梢宰審?fù)雜的問題簡單化。

? ? ? ? 讓我們從執(zhí)行者變成指揮者。

? ? ? ? 寫程序的時候,不是先定義功能,而是先找對象。(買電腦不是先去查什么硬件好,而是直接找一個懂的人)

? ? ? ? 在開發(fā)的時候,先看Java是不是已經(jīng)提供了相應(yīng)的對象,如果有,直接拿來用。

????????如果沒有對象,就造一個對象,然后把需要的功能定義到里面去。(軟件公司沒有招聘到具有Java開發(fā)能力的員工,就在公司內(nèi)部進行培養(yǎng),培養(yǎng)出一個可以進行Java開發(fā)的人)

????03-面向?qū)ο?類與對象的關(guān)系)

? ? ? ? 人開門:名次提煉法。

? ? ? ? 人

? ????? {

? ? ? ? ? ? ? ? 開門(門)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? 門.開();

????????????????}

????????}


? ? ? ? 門

? ? ? ? {

? ? ? ? ? ? ? ? 開(){操作門軸等。}

????????}

? ? ? ? 面向?qū)ο蟮娜齻€特征:

? ? ? ? 封裝,繼承,多態(tài)。

? ? ? ? 以后開發(fā):其實就是找對象使用。沒有對象,就創(chuàng)建一個對象。

? ? ? ? 找對象,建立對象,使用對象。維護對象的關(guān)系。

? ? ? ? 類和對象的關(guān)系:

? ? ? ? 類:對現(xiàn)實生活中事物的描述。

? ? ? ? 對象:就是這類事物,實實在在存在的個體。

? ? ? ? 例:

? ? ? ? 現(xiàn)實生活中的對象:張三 李四。

? ? ? ? 想要描述:提取對象中的共性內(nèi)容。對具體的抽象。

? ? ? ? 描述時:這些對象的共性有:姓名,年齡,性別,學(xué)習(xí)Java的功能。

? ? ? ? 這個描述是用class定義的類來體現(xiàn)的,對象是在Java操作中通過new操作符來產(chǎn)生的實體,這個實體在堆內(nèi)存當中。

? ? ? ? 因此,把這些東西映射到內(nèi)存中,一個是類,一個是實體。

? ? ? ? 例:

? ? ? ? //需求:描述汽車(顏色,輪胎數(shù))。描述事物其實就是在描述事物的屬性和行為。

? ? ? ? //屬性對應(yīng)是類中的變量,行為對應(yīng)的是類中的函數(shù)(方法)。

? ? ? ? //其實定義類,就是在描述事物,就是在定義屬性和行為。屬性和行為共同成為類中的成員(成員變量和成員方法)。

? ? ? ? class Car

? ? ? ? {

? ? ? ? ? ? ? ? //描述顏色

? ? ? ? ? ? ? ? String color="紅色";

? ? ? ? ? ? ? ? //描述輪胎數(shù)

? ? ? ? ? ? ? ? int num=4;

? ? ? ? ? ? ? ? //運行行為

? ? ? ? ? ? ? ? void run()

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? System.out.println(color+".."+num);

? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ?

? ? ? ? }

? ? ? ? class CarDemo

? ? ? ? {

? ? ? ? ? ? ? ? public static void main(String[] args)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? //生產(chǎn)汽車。在java中通過new操作符來完成。

? ? ? ? ? ? ? ? ? ? ? ? //其實就是在堆內(nèi)存產(chǎn)生一個實體。

? ? ? ? ? ? ? ? ? ? ? ? //new Car();這個汽車為了方便操作,得給它取一個名字,就叫c吧

? ? ? ? ? ? ? ? ? ? ? ? Car c=new Car();//c就是一個類類型變量。記住:類類型變量指向?qū)ο蟆?/p>

? ? ? ? ? ? ? ? ? ? ? ? //需求:將已有的車的顏色改成藍色。指揮該對象做使用。在java中指揮方式是:對象.對象成員

? ? ? ? ? ? ? ? ? ? ? ? c.color="blue";????

? ? ? ? ? ? ? ? ? ? ? ? c.run();

? ? ? ? ? ? ? ? ? ? ? ? Car c1=new Car();

? ? ? ? ? ? ? ? ? ? ? ? c1.run(); ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? }

? ? ? ? }


產(chǎn)生一個車車對象
給車車換顏色
再產(chǎn)生一個車車對象并對它的一系列操作

多個引用指向同一個對象:


????04-面向?qū)ο?成員變量和局部變量)? ? ? ??

? ? ????如果需要運行,則寫上主函數(shù),如果不需要運行,只是簡單描述事物,就不用寫主函數(shù)啦。

? ? ????而且可以定義多個類,需要一個主函數(shù)就好啦,在一個主函數(shù)中可以聲明各種對象,并調(diào)用它里面的東西~

? ? ? ? 成員變量和局部變量

? ? ? ? 作用范圍:

? ? ? ? 成員變量作用于整個類中。

? ? ? ? 局部變量作用于函數(shù)中,或者語句中。

? ? ? ? 在內(nèi)存中的位置:

? ? ? ? 成員變量:在堆內(nèi)存中,因為對象的存在,才在內(nèi)存中存在。

? ? ? ? 局部變量:存在棧內(nèi)存中。

? ? ? ??

在本類中創(chuàng)建本類對象

? ? ? ? 也可以在本類中寫主函數(shù),這主函數(shù)中可以創(chuàng)建本類的對象。這個叫在本類中創(chuàng)建本類對象。 ? ? ? ?

? ? ? ? 這樣寫不可以哦,語法上是不允許的。主函數(shù)前面帶static,run()前面沒有,要訪問它也得加上static。

? ? ? ? 至于static是什么意思呢,接著看~后面很快就會說到。

? ? ? ? 但一般程序不會把主函數(shù)寫在類中,因為一個程序有n多個類,需要一個入口就行啦,不需要多個入口。

????05-面向?qū)ο?匿名對象的應(yīng)用)

????????接下來說一個小知識點,叫匿名對象。就是沒有名字的對象。

????????不起名字,就是對象的一種簡寫格式。這種格式有它的應(yīng)用場景,也有它的弊端。

? ? ? ? Car.c=new Car();

? ? ? ? c.num=5;

? ? ? ? 這兩句話可以簡寫成一句話:

? ? ? ? new Car().num=5;

這幾個語句在內(nèi)存中的表示

? ? ? ? 匿名對象調(diào)用屬性是沒有意義的,因為當前語句執(zhí)行完之后這個對象就會消失。

? ? ? ? 而匿名對象調(diào)用方法是有意義的,因為方法會執(zhí)行出來,它是有運行內(nèi)容在里面的。

? ? ? ? 匿名對象使用方式一:當對對象的方法只調(diào)用一次時,可以用匿名對象來完成,這樣比較簡化。

? ? ? ? 如果對一個對象進行多個成員調(diào)用,必須給這個對象起個名字。

? ? ? ? 匿名對象使用方式二:可以將匿名對象作為實際參數(shù)進行傳遞。

? ? ? ? //需求:汽車修配廠。對汽車進行改裝,將來的車改成黑車,三個輪胎。

? ? ? ? main()

? ? ? ? {

????????????????Car c=new Car();????

? ? ? ? ????????show(c);

? ? ? ? }

? ? ? ? public static void show(Car c)

? ? ? ? {

? ? ? ? ? ? ? ? c.num=3;

? ? ? ? ? ? ? ? c.color="black";

? ? ? ? ? ? ? ? c.run();

? ? ? ? } ? ? ? ?

在內(nèi)存中的表示

? ? ? ? 還有一種方法,在main函數(shù)中直接:

? ? ? ? show(new Car());

? ? ? ? 這樣可以提高效率~

? ? ? ? 用第一種方法,運行結(jié)束之后想要釋放空間,讓堆內(nèi)存中的數(shù)據(jù)變成垃圾,可以在main函數(shù)中加一句:

? ? ? ? c=null;

????06-面向?qū)ο?封裝概述)

? ? ? ? 封裝:是指隱藏對象的屬性和實現(xiàn)細節(jié),僅對外提供公共訪問方式。

? ? ? ? 意思就是我們不需要知道實現(xiàn)細節(jié),只要會用就行啦。

? ? ? ? 比如買電腦直接找一個懂行的人,不用懂什么硬件好,不用懂怎么去砍價,直接從他這里拿到一個現(xiàn)成的電腦就OK。

? ? ? ? 好處:

? ? ? ? 將變化隔離。修改其中某一部分對其他不影響,整體依然發(fā)揮它的作用。

? ? ? ? 便于使用。不用了解原理。

? ? ? ? 提高重用性??梢灾貜?fù)使用。

? ? ? ? 提高安全性。不必要了解細節(jié),就是提高安全性。(你自己都不懂,還親自上手胡搗鼓,肯定有安全隱患)

? ? ? ? 封裝原則:

? ? ? ? 將不需要對外提供的內(nèi)容都隱藏起來。

? ? ? ? 把屬性都隱藏,提供公共方法對其訪問。(就像連接主機的線~) ? ? ? ??

權(quán)限修飾符

? ? ? ? 類---->包---->框架。

? ? ? ? 框架是一個集成性相當好的工具,它可以幫你實現(xiàn)很多功能組件的開發(fā)。你不需要了解細節(jié),直接拿過來按它的說明來使用就OK啦。

? ? 07-面向?qū)ο?封裝private)

????????private:私有,權(quán)限修飾符:用于修飾類中的成員(成員變量,成員函數(shù))。

? ? ? ? 私有只在本類中有效。 ? ? ? ? ? ? ??

在其他類中無法調(diào)用私有的成員變量

? ? ? ? 將age私有化以后,類以外即使建立了對象,也不能直接訪問。

? ? ? ? 但是人應(yīng)該有年齡,就需要在Person類中提供對應(yīng)訪問age的方式。 ? ? ? ??

? ? ? ? 但是名字叫haha太不規(guī)范了。 ? ? ? ??

? ? ? ? 一個類中通常有很多屬性,每個屬性一般對應(yīng)兩個方法:設(shè)置(set)和獲?。╣et)。

? ? ? ? 注意:私有僅僅是封裝的一種表現(xiàn)形式。

? ? ? ? 其實不私有,也可以實現(xiàn)封裝。私有是封裝的最小權(quán)限。

? ? ? ? 之所以對外提供訪問方式,就是因為可以再訪問方式中加入邏輯判斷等語句。

? ? ? ? 對訪問的數(shù)據(jù)進行操作。提高代碼健壯性。

? ? ? ? 如果不私有,外界直接可以訪問,就不能保證外界設(shè)置數(shù)據(jù)是否合理了。

? ? ? ? 注意

? ? ? ? 1,凡是set打頭的方法,返回值類型是void。

? ? ? ? 2,凡是get大頭的方法,返回值類型和它獲取的變量一致。

? ? ? ? 3,凡是看到有一對方法:set***和get***,那么這個類中一定有一個私有的成員變量***。

? ? 08-面向?qū)ο?構(gòu)造函數(shù))

? ? ? ? 構(gòu)造函數(shù)的特點

? ? ? ? 1,函數(shù)名與類名相同。

? ? ? ? 2,不用定義返回值類型。和void不一樣。void是沒有一種具體的返回值類型,而它是根本不需要定義返回值類型。

? ? ? ? 3,不可以寫return語句。返回值類型都沒有,所以這個函數(shù)中是不會出現(xiàn)return語句的。你不寫,系統(tǒng)也不會加。

一種構(gòu)造函數(shù)

? ? ? ? 對象一建立就會調(diào)用與之對應(yīng)的構(gòu)造函數(shù)。

? ? ? ? 構(gòu)造函數(shù)的作用:可以用于給對象進行初始化。

? ? ? ? 有一個小問題,剛剛寫的類也沒有這個函數(shù)呀,那它怎么初始化的呢?

? ? ? ? 當一個類中沒有定義構(gòu)造函數(shù)時,那么系統(tǒng)會默認給該類加入一個空參數(shù)的構(gòu)造函數(shù)。 ? ? ? ?

空參數(shù)的構(gòu)造函數(shù)

? ? ? ? 大概醬紫,是為了方便進行初始化,否則沒有辦法初始化。

? ? ? ? 當在類中自定義了構(gòu)造函數(shù)后,默認的構(gòu)造函數(shù)就沒有了,系統(tǒng)就不會幫你加啦。

? ? ? ? 一個類中可以有多個構(gòu)造函數(shù),構(gòu)造函數(shù)可以有重載。我們定義不同的構(gòu)造函數(shù),對不同的對象進行初始化。

構(gòu)造函數(shù)重載

? ? ? ? 這樣結(jié)果會是什么呢??

? ? ? ? 會出錯哦。

一種出錯情況

? ? ? ? 這樣的情況這個對象是無法建立的。

? ? ? ? 構(gòu)造函數(shù)和一般函數(shù)除了在寫法上有不同。在運行上也有不同。

? ? ? ? 構(gòu)造函數(shù)是在對象一建立就運行。給對象初始化。

? ? ? ? 而一般方法是對象調(diào)用才執(zhí)行,是給對象添加對象具備的功能。

? ? ? ? 一個對象建立,構(gòu)造函數(shù)只運行一次。

? ? ? ? 而一般方法可以被該對象調(diào)用多次。

? ? ? ? 有了構(gòu)造函數(shù),“孩子”一出生就有名字了,那還需要setName這種函數(shù)嗎?

? ? ? ? 需要的。

? ? ? ? 構(gòu)造函數(shù)只是在對象建立的時候運行一次,而后面想要修改名字,需要用到setName這個函數(shù)。

? ? ? ? 什么時候定義構(gòu)造函數(shù)呢?

? ? ? ? 當分析事物時,該事物存在具備一些特性或行為,那么將這些內(nèi)容定義在構(gòu)造函數(shù)中。

????09-面向?qū)ο?構(gòu)造代碼塊)

? ? ? ? 構(gòu)造代碼塊的作用:

? ? ? ? 給對象進行初始化。

? ? ? ? 對象一建立就運行,而且優(yōu)先于構(gòu)造函數(shù)執(zhí)行。 ? ?

? ? ? ? 和構(gòu)造函數(shù)的區(qū)別:

? ? ? ? 構(gòu)造代碼塊是給所有對象進行統(tǒng)一初始化,而構(gòu)造函數(shù)是給對應(yīng)的對象初始化。 ?

構(gòu)造代碼塊寫法

? ? ? ? 比如每個“孩子”出生都會哭,就可以把這個功能放在構(gòu)造代碼塊中,不用再在每個構(gòu)造函數(shù)中都寫哭這個功能了。

? ? ? ? 構(gòu)造代碼塊中定義的是不同對象共性的初始化內(nèi)容。

????10-面向?qū)ο?this關(guān)鍵字)

? ? ? ? 構(gòu)造函數(shù)可以私有化。

? ? ? ? 但是如果把一個類中所有構(gòu)造函數(shù)都私有化,代表著這個類無法創(chuàng)建對象。

? ? ? ? 一個問題:如果構(gòu)造函數(shù)中,形參和屬性同名,該怎么區(qū)分它們呢?

? ? ? ? 為了區(qū)分局部變量和成員變量,這個時候就需要給成員變量加一個標記。

? ? ? ? this:看上去,是用于區(qū)分局部變量和成員變量同名情況。

? ? ? ? this:為什么可以解決這個問題呢?

? ? ? ? this到底代表的是什么呢?

? ? ? ? this:就代表本類的對象。到底代表哪一個呢?

? ? ? ? this代表它所在函數(shù)所屬對象的引用。

? ? ? ? 簡單說:那個對象在調(diào)用this所在的函數(shù),this就代表哪個對象。

? ? ? ? 當然正式寫的時候還是要寫成this的。

? ? ? ? ?其實這些位置都是有this的: ? ? ? ?

? ? ? ? p調(diào)用的函數(shù),this就代表p,p1調(diào)用的函數(shù),this就代表p1。

? ? ? ? 那些this之前都被省略了。在沒有同名情況的時候,都可以省略的。但是出現(xiàn)變量同名情況,就一定要加。

? ??11-面向?qū)ο?this關(guān)鍵字的應(yīng)用)

? ? ? ? this的應(yīng)用:當定義類中功能時,該函數(shù)內(nèi)部要用到調(diào)用該函數(shù)的對象時,這時用this來表示這個對象。

? ? ? ? 但凡本類功能內(nèi)部使用了本類對象,都用this表示。

? ? 12-面向?qū)ο?this關(guān)鍵字在構(gòu)造函數(shù)間調(diào)用)

? ? ? ? this:可以用于構(gòu)造函數(shù)之間互相調(diào)用。

? ? ? ? 有些時候會出現(xiàn)這種情況,構(gòu)造函數(shù)有很多,對外提供的卻只有一個。這個時候內(nèi)部就可以互相調(diào)用實現(xiàn)很多初始化功能。

? ? ? ? this語句只能定義在構(gòu)造函數(shù)的第一行,因為初始化要先執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容