一 .面向?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.基本類型:傳遞的是值拷貝,無論怎么改變這個拷貝值,原值不會變

2.引用類型傳遞


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



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