1.6 面向?qū)ο?/h2>

第 1章 面向?qū)ο笏枷?/b>

1.1? 面向?qū)ο笏枷敫攀?/b>

概述

Java語言是一種面向?qū)ο蟮某绦蛟O(shè)計語言,而面向?qū)ο笏枷胧且环N程序設(shè)計思想,我們在面向?qū)ο笏枷氲闹敢?,使用Java語言去設(shè)計、開發(fā)計算機程序。 這里的對象泛指現(xiàn)實中一切事物,每種事物都具備自己的屬性和行為。面向?qū)ο笏枷刖褪窃谟嬎銠C程序設(shè)計過程中,參照現(xiàn)實中事物,將事物的屬性特征、行為特征抽象出來,描述成計算機事件的設(shè)計思想。 它區(qū)別于面向過程思想,強調(diào)的是通過調(diào)用對象的行為來實現(xiàn)功能,而不是自己一步一步的去操作實現(xiàn)。

舉例

洗衣服:

????????面向過程:把衣服脫下來 -->找一個盆-->放點洗衣粉-->加點水-->浸泡10分鐘-->揉一揉-->清洗衣服-->擰干-->晾起來

????????面向?qū)ο螅喊岩路撓聛?-->打開全自動洗衣機-->扔衣服-->按鈕-->晾起來

區(qū)別 :

????????面向過程:強調(diào)步驟。

????????面向?qū)ο螅簭娬{(diào)對象,這里的對象就是洗衣機。

特點

面向?qū)ο笏枷胧且环N更符合我們思考習慣的思想,它可以將復(fù)雜的事情簡單化,并將我們從執(zhí)行者變成了指揮者。面向?qū)ο蟮恼Z言中,包含了三大基本特征,即封裝、繼承和多態(tài)。

1.2? 類和對象

環(huán)顧周圍,你會發(fā)現(xiàn)很多對象,比如桌子,椅子,同學,老師等。桌椅屬于辦公用品,師生都是人類。那么什么是類呢?什么是對象呢?

什么是類

類 :是一組相關(guān)屬性和行為的集合。可以看成是一類事物的模板,使用事物的屬性特征和行為特征來描述該類事物。

現(xiàn)實中,描述一類事物:

????????屬性 :就是該事物的狀態(tài)信息。

????????行為 :就是該事物能夠做什么。

舉例:小貓。

屬性:名字、體重、年齡、顏色。 行為:走、跑、叫。

什么是對象

對象 :是一類事物的具體體現(xiàn)。對象是類的一個實例(對象并不是找個女朋友),必然具備該類事物的屬性

和行為。

現(xiàn)實中,一類事物的一個實例:一只小貓。

舉例:一只小貓。

屬性:tom、5kg、2 years、yellow。 行為:溜墻根走、蹦跶的跑、喵喵叫。

類與對象的關(guān)系

????????類是對一類事物的描述,是 抽象的。

????????對象是一類事物的實例,是 具體的。

????????類是對象的模板,對象是類的實體 。


1.3 類的定義

事物與類的對比

現(xiàn)實世界的一類事物:

屬性:事物的狀態(tài)信息。 行為:事物能夠做什么。

Java中用class描述事物也是如此:

成員變量:對應(yīng)事物的屬性 成員方法:對應(yīng)事物的行為

類的定義格式

定義類 :就是定義類的成員,包括成員變量和成員方法。

成員變量 :和以前定義變量幾乎是一樣的。只不過位置發(fā)生了改變。在類中,方法外。

成員方法 :和以前定義方法幾乎是一樣的。只不過把static去掉,static的作用在面向?qū)ο蠛竺嬲n程中再詳細講解

類的定義格式舉例:

1.4 對象的使用

對象的使用格式

創(chuàng)建對象:

使用對象訪問類中的成員:

成員變量的默認值

1.5 類與對象的練習

定義手機類:

定義測試類

1.6 對象內(nèi)存圖

一個對象,調(diào)用一個方法內(nèi)存圖

通過上圖,我們可以理解,在棧內(nèi)存中運行的方法,遵循"先進后出,后進先出"的原則。變量p指向堆內(nèi)存中的空間,尋找方法信息,去執(zhí)行該方法。但是,這里依然有問題存在。創(chuàng)建多個對象時,如果每個對象內(nèi)部都保存一份方法信息,這就非常浪費內(nèi)存了,因為所有對象的方法信息都是一樣的。那么如何解決這個問題呢?請看如下圖解。

兩個對象,調(diào)用同一方法內(nèi)存圖

對象調(diào)用方法時,根據(jù)對象中方法標記(地址值),去類中尋找方法信息。這樣哪怕是多個對象,方法信息只保存一份,節(jié)約內(nèi)存空間。

一個引用,作為參數(shù)傳遞到方法中內(nèi)存圖

引用類型作為參數(shù),傳遞的是地址值

1.7 成員變量和局部變量區(qū)別

變量根據(jù)定義位置的不同,我們給變量起了不同的名字。如下圖所示:

在類中的位置不同 重點

????????成員變量:類中,方法外

????????局部變量:方法中或者方法聲明上 (形式參數(shù))

作用范圍不一樣 重點

????????成員變量:類中

????????局部變量:方法中

初始化值的不同 重點

????????成員變量:有默認值

????????局部變量:沒有默認值。必須先定義,賦值,最后使用

在內(nèi)存中的位置不同 了解

????????成員變量:堆內(nèi)存

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

生命周期不同 了解

????????成員變量:隨著對象的創(chuàng)建而存在,隨著對象的消失而消失

????????局部變量:隨著方法的調(diào)用而存在,隨著方法的調(diào)用完畢而消失


第 2章 封裝

2.1? 封裝概述

概述

面向?qū)ο缶幊陶Z言是對客觀世界的模擬,客觀世界里成員變量都是隱藏在對象內(nèi)部的,外界無法直接操作和修改。封裝可以被認為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被其他類隨意訪問。要訪問該類的數(shù)據(jù),必須通過指定的方式。適當?shù)姆庋b可以讓代碼更容易理解與維護,也加強了代碼的安全性。

原則

將屬性隱藏起來,若需要訪問某個屬性,提供公共方法對其訪問。

2.2 封裝的步驟

????????1. 使用? private 關(guān)鍵字來修飾成員變量。

????????2. 對需要訪問的成員變量,提供對應(yīng)的一對? getXxx 方法 、 setXxx 方法。

2.3? 封裝的操作——private關(guān)鍵字

private的含義

????????1. private是一個權(quán)限修飾符,代表最小權(quán)限。

????????2. 可以修飾成員變量和成員方法。

????????3. 被private修飾后的成員變量和成員方法,只在本類中才能訪問。


private的使用格式

1. 使用 private 修飾成員變量,代碼如下:

2. 提供 getXxx 方法 / setXxx 方法,可以訪問成員變量,代碼如下:

2.4 封裝優(yōu)化1——this關(guān)鍵字

我們發(fā)現(xiàn) setXxx 方法中的形參名字并不符合見名知意的規(guī)定,那么如果修改與成員變量名一致,是否就見名知意了呢?代碼如下:

經(jīng)過修改和測試,我們發(fā)現(xiàn)新的問題,成員變量賦值失敗了。也就是說,在修改了 setXxx() 的形參變量名后,方法并沒有給成員變量賦值!這是由于形參變量名與成員變量名重名,導(dǎo)致成員變量名被隱藏,方法中的變量名,無法訪問到成員變量,從而賦值失敗。所以,我們只能使用this關(guān)鍵字,來解決這個重名問題。

this的含義

this代表所在類的當前對象的引用(地址值),即對象自己的引用。

記住 :方法被哪個對象調(diào)用,方法中的this就代表那個對象。即誰在調(diào)用,this就代表誰。

this使用格式

使用 this 修飾方法中的變量,解決成員變量被隱藏的問題,代碼如下:

小貼士:方法中只有一個變量名時,默認也是使用 this 修飾,可以省略不寫。

2.5 封裝優(yōu)化2——構(gòu)造方法

當一個對象被創(chuàng)建時候,構(gòu)造方法用來初始化該對象,給對象的成員變量賦初始值。

小貼士:無論你與否自定義構(gòu)造方法,所有的類都有構(gòu)造方法,因為Java自動提供了一個無參數(shù)構(gòu)造方法,一旦自己定義了構(gòu)造方法,Java自動提供的默認無參數(shù)構(gòu)造方法就會失效。

構(gòu)造方法的定義格式

構(gòu)造方法的寫法上,方法名與它所在的類名相同。它沒有返回值,所以不需要返回值類型,甚至不需要void。使用構(gòu)造方法后,代碼如下:

注意事項

????????1. 如果你不提供構(gòu)造方法,系統(tǒng)會給出無參數(shù)構(gòu)造方法。

????????2. 如果你提供了構(gòu)造方法,系統(tǒng)將不再提供無參數(shù)構(gòu)造方法。

????????3. 構(gòu)造方法是可以重載的,既可以定義參數(shù),也可以不定義參數(shù)。

2.6 標準代碼——JavaBean

JavaBean 是 Java語言編寫類的一種標準規(guī)范。符合 JavaBean 的類,要求類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造方法,提供用來操作成員變量的 set 和 get 方法。

編寫符合 JavaBean 規(guī)范的類,以學生類為例,標準代碼如下:

測試類,代碼如下:

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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