java面向?qū)ο笏枷?/h2>

一 .面向?qū)ο笏枷?/h1>

1面向?qū)ο笏季S:.分析問題第一步:這個問題有哪些類和對象,第二步:這個類和對象有哪些方法和屬性,第三步:類和類之間有哪些關(guān)系

2.面向?qū)ο笫菑娬{(diào)的是功能,行為;將功能封裝進對象,強調(diào)了功能的對象;

3.面向?qū)ο笫腔诿嫦蜻^程的

4.面向?qū)ο笫且环N思想,能讓復(fù)雜問題簡單化,程序員不需要了解具體的實現(xiàn)過程,只需要指揮對象去實現(xiàn)功能

二 .類和對象

1.類

類是用于描述同一類的對象的一個抽象的概念,類中定義了這一類對象所具有的靜態(tài)屬性和動態(tài)屬性

類可以看成一類對象的模板,對象可以看成該類的一個具體實例。

類的實例化過程:

1)JVM 讀取指定 classpath 路徑下的 class 文件,加載到內(nèi)存,如果有直接父類,也會加載父類;

2)堆內(nèi)存分配空間;

3)執(zhí)行父類、子類靜態(tài)代碼塊;

4)對象屬性進行默認(rèn)初始化;

5)調(diào)用構(gòu)造方法;

6)在構(gòu)造方法中,先調(diào)用父類構(gòu)造方法初始化父類數(shù)據(jù);

7)初始化父類數(shù)據(jù)后,顯示初始化,執(zhí)行子類的構(gòu)造代碼塊;

8)再進行子類構(gòu)造方法的特定初始化;

9)初始化完畢后,將地址賦值給引用

2.對象

使用 new 關(guān)鍵字或反射技術(shù)創(chuàng)建的某個類的實例

全局變量

靜態(tài)變量存放在方法區(qū)中;

當(dāng)類被加載的時候就會創(chuàng)建,會跟著類的消失而消失;

作用于整個類中,可以直接被類調(diào)用;

成員變量

如果沒有實例化放在棧中,如果實例化了,放在堆中,棧中放的是指向堆中對象的引用地址;

在對象被創(chuàng)建時存在,當(dāng)對象被GC回收時,它會消失;

作用在整個類中,除靜態(tài)方法不能使用,被對象調(diào)用;

局部變量

new的對象放在堆中,8中基本數(shù)據(jù)類型變量放在棧中,變量所對應(yīng)的值是放在棧幀中;

當(dāng)方法被調(diào)用時而存在,當(dāng)方法調(diào)用結(jié)束而消失;

作用在一個局部區(qū)域,比如說在一個方法中,方法調(diào)用;

三 .封裝

(1) 隱藏對象的屬性和實現(xiàn)細節(jié),僅對外提供公共訪問方式;

(2) 數(shù)據(jù)安全,將對象不需要讓外界訪問的成員變量和方法私有化;

(3) 具體實現(xiàn):使用private修飾符把成員變量設(shè)置為私有,防止外部程序直接隨意調(diào)用或修改成員變量,然后對外提供?public?的?set?和?get?方法

(4)??Java 的訪問權(quán)限修飾關(guān)鍵字:

構(gòu)造方法

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

所有的類都有構(gòu)造方法,因為Java自動提供了一個無參數(shù)構(gòu)造方法,一旦自己定義了構(gòu)造方法,Java自動提供的默認(rèn)無參數(shù)構(gòu)造方法就會失效

四 .繼承

(1)定義:就是子類繼承父類的屬性和行為,使得子類對象具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為

(2)? 好處:① 提高代碼的復(fù)用性。②類與類之間產(chǎn)生了關(guān)系,是多態(tài)的前提。

(3) 繼承和類實例化過程:

* 繼承機制是單繼承,一個類只能有一個直接父類

*子類和父類有同樣的方法和成員變量,子類可以通過super關(guān)鍵字調(diào)用父類的方法和成員變量

*在調(diào)用子類構(gòu)造方法時,會隱式的調(diào)用父類的構(gòu)造方法super(),如果父類沒有無參構(gòu)造方法,為了避免編譯錯誤,需要在子類構(gòu)造方法中顯式的調(diào)用父類的含參構(gòu)造方法

*子類需要調(diào)用父類的成員變量和方法時,需要調(diào)用父類的構(gòu)造方法類初始化,之后再進行子類成員變量和方法的初始化,構(gòu)造方法不可以被覆蓋

*當(dāng)子類需要擴展父類中的某個方法時,可以覆蓋父類中的這個方法,但是子類的訪問權(quán)限必須大于父類的訪問權(quán)限

*父類中的訪問權(quán)限為private的,子類不可以繼承

*在每次創(chuàng)建子類對象時,先初始化父類空間,再創(chuàng)建其子類對象本身

this 關(guān)鍵字

代表當(dāng)前對象的引用(誰調(diào)用就代表誰);

可以調(diào)用屬性,調(diào)用方法;

可以理解為表示對象本身的指針;

普通的直接引用;形參與成員名字重名,用this來區(qū)分:引用構(gòu)造函數(shù)

super 關(guān)鍵字

代表父類的存儲空間標(biāo)識(可以理解為父親的引用);

普通的直接引用,子類中的成員變量或方法與父類中的成員變量或方法同名,引用構(gòu)造函數(shù)

五 .多態(tài)

(1) 是指同一行為,具有多個不同表現(xiàn)形式

(2) 多態(tài)體現(xiàn):繼承或者實現(xiàn);方法的重寫或者方法的重載;父類引用指向子類對象

(3) 好處:可以使程序編寫的更簡單,并有良好的擴展

接口

*如果接口中新增加了方法,則需要修改所有實現(xiàn)此接口的實現(xiàn)方法

*接口中的成員變量會被隱式的指定為public static final

*接口中的方法都是抽象方法;

*一個類可以實現(xiàn)多個接口;

*實現(xiàn)接口需要實現(xiàn)接口的所有方法

*接口是對類局部(行為)進行抽象

抽象類

*如果再抽象類中添加方法,底層所有繼承該抽象類的子類都不需要做修改,如果需要調(diào)用,直接調(diào)用父類中的方法即可

*抽象類事多整個類進行抽象,包括屬性和行為,所以抽象類一個是在項目開始就得確定好的公共類

重載

*用于同一個類中

*橫向擴展

*必須有不同的參數(shù)列表

*可以有不同的返回類型

*可以有不同的權(quán)限修飾符

*可以拋出不同的異常

重寫

*用于繼承關(guān)系中,子類可以重寫父類的方法進行擴展

*縱向擴展

*參數(shù)列表必須與重寫的方法相同

*返回的類型必須與重寫的相同

*訪問修飾符的限定必須大于被重寫的方法的訪問修飾符(public>protected>default>private)

*重寫方法一定不能拋出新的檢查異?;蛘咧貙懙姆椒ㄉ昝鞲訉挿旱臋z查異常

父類引用指向子類對象

六 .參數(shù)傳遞

1.基本類型:傳遞的是值拷貝,無論怎么改變這個拷貝值,原值不會變

兩次輸出的值都是3

2.引用類型傳遞


圖一
圖二

仔細看圖一和圖二的區(qū)別,輸出的結(jié)果就不同

圖一的內(nèi)存變化
圖二的內(nèi)存變化

Java中對象作為參數(shù)傳遞時,是把對象在內(nèi)存中的地址拷貝了一份傳給了參數(shù)

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