java基础-2
面向?qū)ο?/h2>
定義
面向?qū)ο笫且环N思維方式,相對(duì)于面向過程?面向過程注重流程中的每一步,清楚流程中的每一個(gè)細(xì)節(jié)?面向?qū)ο笞⒅氐氖菍?duì)象,有了對(duì)象就有對(duì)象的一屆?自己動(dòng)手做--面向過程,找其他人做面向?qū)ο?面向?qū)ο蠛兔嫦蜻^程各有優(yōu)劣,復(fù)雜事務(wù)面向?qū)ο?#xff0c;簡(jiǎn)單事務(wù)面向過程?面向?qū)ο蠡诿嫦蜻^程
類與對(duì)象的關(guān)系
類是對(duì)象的概括/抽取?通過new關(guān)鍵字創(chuàng)建對(duì)象,可以給對(duì)象的屬性賦值,也可調(diào)用方法
對(duì)象的內(nèi)存存儲(chǔ)
屬性存在堆中?對(duì)象存在棧中
成員變量和局部變量??作用范圍不同?內(nèi)存位置不同?生命周期不同
構(gòu)造方法?特點(diǎn);與類名相同沒有返回值?作用;用于創(chuàng)建對(duì)象?可以重載
this關(guān)鍵字?代替本類對(duì)象調(diào)用本類中的屬性和方法?代表本類在活動(dòng)的對(duì)象的引用--即虛擬對(duì)象?利用this調(diào)用對(duì)應(yīng)的構(gòu)造方法時(shí)必須放在構(gòu)造方法的首行構(gòu)造代碼塊?初始代碼塊--用{}包起來的代碼?無論用哪個(gè)構(gòu)造方法創(chuàng)建對(duì)象,它都會(huì)在構(gòu)造方法前執(zhí)行一次局部代碼塊?方法中用{}包起來的代碼?提高棧內(nèi)存的利用率
面向?qū)ο蟮奶卣?/strong>?封裝?權(quán)限修飾符?public?protected?默認(rèn)?private?方法屬性的私有化?內(nèi)部類?繼承?利用extends關(guān)鍵字?子類通過繼承可以使用父類中的一部分方法和屬性?java單繼承?多繼承比單繼承更好的提高代碼復(fù)用性?單繼承更能明確方法的調(diào)用?單繼承提高了代碼的復(fù)用性,也避免了方法調(diào)用產(chǎn)生的混亂?super關(guān)鍵字?在子類中表示父類對(duì)象的引用,一個(gè)虛擬對(duì)象?子類通過super來調(diào)用父類的方法和 屬性?super語句必須放在子類構(gòu)造的第一行?多態(tài)?編譯時(shí)多態(tài)?方法的重載是行為的多態(tài)?重載指的是在同一個(gè)類中存在方法名一致而參數(shù)列表不同的方法。參數(shù)列表不同指的是參數(shù)的 個(gè)數(shù)或者是參數(shù)類型不同。重載只和方法簽名有關(guān),和修飾符、返回值類型、異常都沒有關(guān)系。重載本身是一種編譯時(shí)多態(tài)。?運(yùn)行時(shí)多態(tài)-基于繼承?向上造型?方法的重寫?在父子類存在方法簽名一致的非靜態(tài)方法?兩等兩小一大?重寫指的是在父子類中存在方法簽名相同的非靜態(tài)方法。在構(gòu)成重寫的時(shí)候,子類方法的權(quán)限修飾符的范圍要比父類權(quán)限修飾符的范圍大或者保持一致。子類在重寫父類方法的時(shí)候,如果父類方法返回值類型是基本類型或者是void,那么子類方法的返回值類型要保持一致。如果父類方法返回值類型是引用類型,那么子類方法返回值類型要和父類一致或者是父類方法返回值類型的子類。子類在重寫方法的時(shí)候所拋出的編譯時(shí)異常不能超過父類編譯時(shí)異常的范圍。重寫本身是一種運(yùn)行時(shí)多態(tài)。?抽象?abstract修飾符?修飾方法;抽象方法,子類繼承后必須重寫抽象方法?可以被重載?不能被static/final/private修飾?如果抽象方法用默認(rèn)權(quán)限,那么子類必須與父類同包?修飾類,抽象類;抽象方法存在的類必須是抽象類?不能創(chuàng)建對(duì)象?有構(gòu)造方法?不能用final修飾?可以有其他方法和屬性,不一定有抽象方法
static-靜態(tài)?靜態(tài)變量/類變量?類是加載到方法區(qū)中?類在第一次使用時(shí)加載到方法區(qū),加載之后不會(huì)移除?靜態(tài)方法/類方法?隨著類加載到方法區(qū)中,先于對(duì)象存在?用類名調(diào)用靜態(tài)方法?在靜態(tài)方法中不可以直接使用本類中的非靜態(tài)屬性和方法?不可以定義靜態(tài)變量-靜態(tài)方法調(diào)用才在棧中執(zhí)行?可以重載?可以繼承?不可以被重寫?父子類方法中可以存在方法簽名一致的靜態(tài)方法-構(gòu)成隱藏?父子類中方法簽名一致時(shí)要么都是非靜態(tài)(重寫),要么都是靜態(tài)(隱藏)?靜態(tài)代碼塊?用static{}定義的代碼塊?在類加載的時(shí)候執(zhí)行一次?執(zhí)行順序:父類靜態(tài)->子類靜態(tài)->父類非靜態(tài)->子類非靜態(tài)?所有的靜態(tài)只能定義在類中不能定義到代碼塊中
final修飾符?修飾數(shù)據(jù); 常量定義之后不可改變?修飾方法;最終方法,不能被重寫/隱藏,可以重載,可以被繼承?修飾類;最終類,不能被繼承
接口?一個(gè)類的方法都是抽象方法,就可以將這個(gè)類聲明為一個(gè)接口?用interface定義--jdk1.8之前接口中都是抽象方法?接口不是類--不能創(chuàng)建對(duì)象,也沒有構(gòu)造方法?通過implement關(guān)鍵字讓類實(shí)現(xiàn)接口-類實(shí)現(xiàn)接口要重寫接口中的所有抽象方法?java中單繼承多實(shí)現(xiàn)-一個(gè)類只能繼承一個(gè)父類,可以實(shí)現(xiàn)多個(gè)接口?接口可以繼承多個(gè)接口,接口之間多繼承?jdk1.8對(duì)接口的改進(jìn)?接口中的默認(rèn)方法?允許定義實(shí)體方法-默認(rèn)方法和靜態(tài)方法?實(shí)體方法要用default修飾?lambda表達(dá)式?當(dāng)接口中只要一個(gè)抽象方法時(shí)可以用lambda表達(dá)式創(chuàng)建接口對(duì)象?(參數(shù)列表)->{方法體}?方法體只有一句,可以省略{}可return不寫,這一句的執(zhí)行結(jié)果默認(rèn)為返回值?定義表達(dá)式的時(shí)候參數(shù)類型可以省略不寫?如果一個(gè)接口在只有一個(gè)抽象方法,那么這個(gè)接口可以用@FunctionalInterface 聲明為函數(shù)式接口
內(nèi)部類?方法內(nèi)部類?成員內(nèi)部類?靜態(tài)內(nèi)部類?匿名內(nèi)部類?在類中定義類和接口,在接口在定義類和接口
包?package?import?java.lang默認(rèn)導(dǎo)入?定義包的時(shí)候盡量不要使用java/javax/org
垃圾分代回收機(jī)制?垃圾回收針對(duì)堆內(nèi)存?垃圾回收是自動(dòng)的由垃圾回收器GC在堆內(nèi)存使用率超過70%時(shí)自動(dòng)回收?堆內(nèi)存?新生代?伊甸園區(qū)?幸存區(qū)?minor GC初代回收?老生代?
轉(zhuǎn)載于:https://www.cnblogs.com/Striverchen/p/10519483.html
總結(jié)
- 上一篇: P1351 联合权值
- 下一篇: 使用Xpath