劃重點~面向?qū)ο?/b>。要進入主題啦。
????01-面向?qū)ο?概述)
? ? ? ? 面向?qū)ο笫且环N思想。
? ? ? ? 早期的思想是面向過程,思想有一個演變形式,慢慢演變成了面向?qū)ο?。面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。
? ? ? ? 通過一個例子來說明:
? ? ? ? 把大象放進冰箱里。
? ? ? ? 步驟:
? ? ? ? 1,打開冰箱門。
? ? ? ? 2,把大象放進去。
? ? ? ? 3,關(guān)上冰箱門。
? ? ? ? 我們在強調(diào)過程。這個是一個標準的面向過程的思想,注重的是這個過程中的行為。
? ? ? ? 既然打開、存放、關(guān)閉,都是冰箱的行為,我們就把這些行為全部定義到冰箱中,讓冰箱來完成。冰箱是一個實實在在存在的東西,我們把它叫做對象。 ? ? ? ?


? ? ? ? 面向?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(); ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? }
? ? ? ? }



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

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

? ? ????如果需要運行,則寫上主函數(shù),如果不需要運行,只是簡單描述事物,就不用寫主函數(shù)啦。
? ? ????而且可以定義多個類,需要一個主函數(shù)就好啦,在一個主函數(shù)中可以聲明各種對象,并調(diào)用它里面的東西~
? ? ? ? 成員變量和局部變量
? ? ? ? 作用范圍:
? ? ? ? 成員變量作用于整個類中。
? ? ? ? 局部變量作用于函數(shù)中,或者語句中。
? ? ? ? 在內(nèi)存中的位置:
? ? ? ? 成員變量:在堆內(nèi)存中,因為對象的存在,才在內(nèi)存中存在。
? ? ? ? 局部變量:存在棧內(nèi)存中。
? ? ? ??

? ? ? ? 也可以在本類中寫主函數(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;

? ? ? ? 匿名對象調(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();
? ? ? ? } ? ? ? ?

? ? ? ? 還有一種方法,在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)容都隱藏起來。
? ? ? ? 把屬性都隱藏,提供公共方法對其訪問。(就像連接主機的線~) ? ? ? ??

? ? ? ? 類---->包---->框架。
? ? ? ? 框架是一個集成性相當好的工具,它可以幫你實現(xiàn)很多功能組件的開發(fā)。你不需要了解細節(jié),直接拿過來按它的說明來使用就OK啦。
? ? 07-面向?qū)ο?封裝private)
????????private:私有,權(quán)限修飾符:用于修飾類中的成員(成員變量,成員函數(shù))。
? ? ? ? 私有只在本類中有效。 ? ? ? ? ? ? ??

? ? ? ? 將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)也不會加。

? ? ? ? 對象一建立就會調(diào)用與之對應(yīng)的構(gòu)造函數(shù)。
? ? ? ? 構(gòu)造函數(shù)的作用:可以用于給對象進行初始化。
? ? ? ? 有一個小問題,剛剛寫的類也沒有這個函數(shù)呀,那它怎么初始化的呢?
? ? ? ? 當一個類中沒有定義構(gòu)造函數(shù)時,那么系統(tǒng)會默認給該類加入一個空參數(shù)的構(gòu)造函數(shù)。 ? ? ? ?

? ? ? ? 大概醬紫,是為了方便進行初始化,否則沒有辦法初始化。
? ? ? ? 當在類中自定義了構(gòu)造函數(shù)后,默認的構(gòu)造函數(shù)就沒有了,系統(tǒng)就不會幫你加啦。
? ? ? ? 一個類中可以有多個構(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)造函數(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í)行。

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