Java學(xué)習(xí) | 面向?qū)ο缶幊蹋ㄉ希?/h2>

本筆記是聽尚硅谷宋紅康老師講解Java基礎(chǔ)所整理

4.1學(xué)習(xí)面向?qū)ο笾骶€:

Java類及類的成員:屬性、方法、構(gòu)造器;代碼塊,內(nèi)部類

面向?qū)ο蟮娜筇卣鳎悍庋b性、繼承性、多態(tài)性

其他關(guān)鍵字

面向過程(POP):Procedure Oriented Programming

面向?qū)ο螅∣OP)? :? Object Oriented Programming

二者都是一種思想,面向?qū)ο笫窍鄬τ诿嫦蜻^程而言的。面向過程,強調(diào)的是功能行為,以函數(shù)為最小單位,考慮怎么做。面向?qū)ο?,將功能封裝進對象,強調(diào)具備了功能的對象,以類/對象為最小單位,考慮誰來做。

4.2基本元素:類、對象

類:對一類事物的描述,是抽象的、概念的定義

對象:是實際存在的該類事物的每個個體,也稱為實例(面向?qū)ο蟪绦蛟O(shè)計的重點是類的設(shè)計)

面試中,若問及什么是類與對象,應(yīng)該舉開發(fā)中的情形,例如Scanner類以及scan對象。

4.2.1常見類的成員:

屬性(filed):成員變量

方法、行為:成員方法、函數(shù)

4.2.2Java類的實例化

//創(chuàng)建Person類的對象

Person p1 = new Person();

//調(diào)用對象的結(jié)構(gòu):屬性、方法

//調(diào)用屬性

p1.name;

//調(diào)用方法

p1.say();

4.2.3類和對象的使用(面向?qū)ο笏枷肼涞氐膶崿F(xiàn))

創(chuàng)建類,設(shè)計類的成員

創(chuàng)建類的對象

通過“對象.屬性”或“對象.方法”調(diào)用對象的結(jié)構(gòu)

如果創(chuàng)建了一個類的多個對象,則每個對象都獨立擁有一套類的屬性(非static類)

4.2.4 屬性(成員變量)vs 局部變量

1)相同點:

定義變量的格式:數(shù)據(jù)類型 變量名 = 變量值;

先聲明,后使用;

變量都有其對應(yīng)的作用域。

2)不同點:

在類中聲明的位置不同

屬性:直接定義在類的一對{}內(nèi);

局部變量:聲明在方法內(nèi),方法形參,代碼塊內(nèi)、構(gòu)造器形參,構(gòu)造器內(nèi)部的變量

關(guān)于權(quán)限修飾符的不同

屬性:可以在聲明屬性時,指明其權(quán)限,使用權(quán)限修飾符;

局部變量:不可使用權(quán)限修飾符

默認(rèn)初始化值不同

屬性:類的屬性,根據(jù)其類型,都有默認(rèn)初始化值。

整形:0? ? 字符型:0(或'\u0000')? ? 引用數(shù)據(jù)類型:null? ? ? 浮點型:0.0? ? ? 布爾型:false

局部變量:沒有默認(rèn)初始化值。意味著,在調(diào)用局部變量之前,一定要顯示賦值

在內(nèi)存中加載位置不同

屬性:加載在堆空間中(非static)

局部變量:加載到??臻g中

4.3方法的聲明

權(quán)限修飾符? 返回值類型? 方法名(形參列表){

方法體;

}

4.3.1關(guān)于權(quán)限修飾符

private、public、缺省、protected

4.3.2關(guān)于返回值類型

有返回值 vs 無返回值

如果方法有返回值,則必須在方法聲明時指明返回值類型,用return關(guān)鍵字返回

如果方法沒有返回值,方法聲明時,用void 表示

4.3.3關(guān)于形參列表

方法可以聲明0個、1個或多個形參。

格式: 數(shù)據(jù)類型1 形參1,數(shù)據(jù)類型2 形參2,...

方法的使用中,可以使用當(dāng)前類的屬性或方法

方法中不可以定義方法

4.4理解“萬事萬物”皆對象

如何理解“萬事萬物”皆對象

4.5對象數(shù)組的內(nèi)存解析

內(nèi)存解析的說明:

引用類型的變量,只可能存儲兩類值:null或地址值(含變量的類型)

匿名對象:

//語法格式:

new Phone().sendEmail();//Phone是已經(jīng)定義好的類

理解:創(chuàng)建的對象沒有顯示的賦給一個變量名;

特征:匿名對象只能調(diào)用一次;

4.6再談方法

4.6.1方法的重載

重載(overload)的概念:

定義:在同一個類中,允許存在一個以上的同名方法,只要它們的參數(shù)個數(shù)或參數(shù)類型不同即可——“兩同一不同”(同一個類、相同方法名;參數(shù)列表不同:參數(shù)個數(shù)不同、參數(shù)類型不同)

例子:

判斷是否重載:嚴(yán)格按照定義來判斷,跟方法的權(quán)限修飾符、返回值類型、形參變量名、方法體都沒有關(guān)系!

在通過對象調(diào)用方法時,確定某一個指定的方法:

方法名 ——> 參數(shù)列表

4.6.2可變形參的方法

jdk5.0新增的內(nèi)容

具體使用:

可變個數(shù)形參的格式:數(shù)據(jù)類型 ... 變量名

當(dāng)調(diào)用可變個數(shù)形參的方法時,傳入的參數(shù)個數(shù)可以是:0個,1個,2個....

可變個數(shù)形參的方法與本類方法名相同,形參不同的方法之間構(gòu)成重載

可變個數(shù)形參的方法與本類方法名相同,形參類型也相同的數(shù)組之間不構(gòu)成重載

可變個數(shù)形參在方法的形參中,必須聲明在末尾

在一個方法的形參位置,最多只能聲明一個可變形參

4.6.3方法參數(shù)的值傳遞機制

關(guān)于變量的賦值:

如果變量是基本數(shù)據(jù)類型,此時賦值的是變量所保存的數(shù)據(jù)值;

如果變量是應(yīng)用數(shù)據(jù)類型,此時賦值的是變量所保存的數(shù)據(jù)的地址值。

方法形參的轉(zhuǎn)遞機制:值傳遞

形參:方法定義時,聲明的小括號內(nèi)的參數(shù)

實參:方法調(diào)用時,實際傳遞給形參的值

值傳遞機制:

如果參數(shù)是基本類型,此時實參賦給形參的是實參真實存儲的數(shù)據(jù)值;

如果參數(shù)是引用數(shù)據(jù)類型,此時實參賦給形參的是實參存儲數(shù)據(jù)的地址值。

4.6.4遞歸方法(了解)

遞歸方法:一個方法體內(nèi)調(diào)用它自身

方法遞歸包含了一種隱式的循環(huán),它會重復(fù)執(zhí)行某段代碼,但這種重復(fù)執(zhí)行無須循環(huán)控制;遞歸一定要向已知方向遞歸,否則這種遞歸就變成了無窮遞歸,類似于死循環(huán)。

4.7面向?qū)ο筇卣髦唬悍庋b與隱藏

程序設(shè)計追求“高內(nèi)聚,低耦合”。

高內(nèi)聚:類的內(nèi)部數(shù)據(jù)操作細(xì)節(jié)自己完成,不允許外部干涉;

低耦合:僅對外暴露少量的方法用于使用。

隱藏對象內(nèi)部的復(fù)雜性,只對外公開簡單的接口,便于外界調(diào)用,從而提高系統(tǒng)的可擴展性、可維護性。通俗的說,把該隱藏的隱藏起來,該暴露的暴露出來,這就是封裝性的設(shè)計思想。

4.7.1問題的引入

當(dāng)創(chuàng)建一個類的對象以后,可以通過“對象.屬性”的方式,對對象的屬性進行賦值,此時賦值只收到屬性的數(shù)據(jù)類型和存儲范圍的制約。但在實際問題中,往往需要給屬性賦值加入額外的限制條件。這個條件就不能在屬性聲明時體現(xiàn),只能通過方法進行限制條件的添加,同時需要避免用戶再使用“對象.屬性”的方法對屬性進行賦值,則需要將屬性聲明為私有的(private),此時,針對于屬性就體現(xiàn)了封裝性。

4.7.2封裝性的體現(xiàn):

將類的屬性xxx私有化(private),同時提供公共的(public)方法來獲?。╣etXxx)和設(shè)置(setXxx)此屬性的值。

不對外暴露的私有的方法

單例模式(將構(gòu)造器私有化)

如果不希望類在包外調(diào)用,可以將類設(shè)置為缺省的

4.7.3權(quán)限修飾符(封裝性體現(xiàn))

Java規(guī)定的四種權(quán)限(從小到大排列):private、缺省、protected、public

四種權(quán)限可以用來修飾類及類的內(nèi)部結(jié)構(gòu):屬性、方法、構(gòu)造器、內(nèi)部類

具體的,四種權(quán)限都可以用來修飾類的內(nèi)部結(jié)構(gòu):屬性、方法、構(gòu)造器、內(nèi)部類

修飾類的話只能使用:缺省、public

總結(jié)封裝性:Java提供了四種權(quán)限修飾符來修飾類及類的內(nèi)部結(jié)構(gòu),體現(xiàn)類及類的內(nèi)部結(jié)構(gòu)在被調(diào)用時的可見性的大小。

4.8類的成員之三:構(gòu)造器(或構(gòu)造方法constructor)

4.8.1構(gòu)造器的作用

創(chuàng)建對象、初始化對象

如果沒有顯式的定義一個構(gòu)造器的話,則系統(tǒng)默認(rèn)提供一個空參的構(gòu)造器

定義構(gòu)造器的格式:權(quán)限修飾符 類名(形參列表){}

一個類中定義的多個構(gòu)造器,彼此構(gòu)成重載

一旦我們顯式的定義了類的構(gòu)造器之后,系統(tǒng)就不再提供默認(rèn)的空參構(gòu)造器

一個類中,至少會有一個構(gòu)造器

4.8.2屬性賦值的先后順序

默認(rèn)初始化

顯式初始化

構(gòu)造器中初始化

通過“對象.方法”或“對象.屬性”的方式,賦值

4.8.3擴展:JavaBean

JavaBean是一種Java語言寫成的可重用組件

所謂JavaBean,指符合如下標(biāo)準(zhǔn)的Java類:

類是公共的

有一個無參的公共構(gòu)造器

有屬性,且有對應(yīng)的get、set方法

4.9關(guān)鍵字:this的使用

this關(guān)鍵字的使用:

????this可以用來修飾:屬性、方法、構(gòu)造器

this修飾屬性和方法:

????this理解為:當(dāng)前對象 或 當(dāng)前正在創(chuàng)建的對象

????在類的方法中,可以使用“this.屬性”或“this.方法”的方式,調(diào)用當(dāng)前對象屬性或方法。

????但通常情況下,省略“this."。特殊情況下,如果方法的形參和類的屬性同名時,必須顯式使用“this.變量”的方式,表明此變量是屬性,而非形參。

????在類的構(gòu)造器中,同上。

this用來調(diào)用構(gòu)造器

????在類的構(gòu)造器中,可以顯式的使用“this(形參列表)”方式,調(diào)用本類中指定的其他構(gòu)造器

????構(gòu)造器不能通過“this(形參列表)”方式調(diào)用自己

????如果一個類中有n個構(gòu)造器,則最多有n-1個構(gòu)造器使用了“this(形參列表)”

規(guī)定:“this(形參列表)”必須聲明在當(dāng)前構(gòu)造器的首行

構(gòu)造器內(nèi)部,最多只能聲明一個“this(形參列表)”,用來調(diào)用其他的構(gòu)造器

4.10 關(guān)鍵字:package、import的使用

package關(guān)鍵字的使用

????為了更好的實現(xiàn)項目中類的管理,提出包的概念;

????使用package聲明類或接口所屬的包,聲明在源文件的首行

????包,屬于標(biāo)識符,遵循標(biāo)識符的命名規(guī)則、規(guī)范(xxxyyyzzz),“見名知意”

????每“.”一次,就代表一層文件目錄

補充:同一個包下,不能命名同名的接口、類

MVC設(shè)計模式

import關(guān)鍵字的使用

? ? 在源文件中顯式的使用import結(jié)構(gòu)導(dǎo)入指定包下的類、接口

????聲明在包的聲明和類的聲明之間

????如果需要導(dǎo)入多個結(jié)構(gòu),則并列寫出即可

????可以使用"xxx.*"的方式,表示可以導(dǎo)入xxx包下的所有結(jié)構(gòu)

????如果使用的類或接口是java.lang包下定義的,則可以省略import結(jié)構(gòu)

????如果使用的類或接口是本包下定義的,則可以省略import結(jié)構(gòu)

????如果在源文件中,使用了不同包下的同名的類,則必須至少有一個類需要以全類名的方式顯示

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