學習記錄之面向?qū)ο?/h1>
1. 構(gòu)造方法:構(gòu)造函數(shù)、構(gòu)造器、構(gòu)建器----------------復(fù)用給成員變量初始化代碼
? ?- 作用:給成員變量賦初始值
? ?- 與類同名,沒有返回值類型(連void都沒有)
? ?- 在創(chuàng)建(new)對象時被自動調(diào)用
? ?- 若自己不寫構(gòu)造方法,則編譯器默認提供一個無參構(gòu)造方法,
? ? ?若自己寫了構(gòu)造方法,則不再默認提供
? ?- 構(gòu)造方法可以重載
2. this:指代當前對象,哪個對象調(diào)用方法它指的就是哪個對象
? ?? ? ? ? ? 只能用在方法中,方法中訪問成員變量之前默認有個this.
? ?this的用法:
? ?- this.成員變量名--------------訪問成員變量當成員變量和局部變量同名時,若想訪問成員變量則this不能省略,其它一般省略
? ?- this.方法名()------------------調(diào)用方法(一般不用,了解)
? ?- this()----------------------------調(diào)用構(gòu)造方法(一般不用,了解)
null:表示空,沒有指向任何對象。若引用的值為null,則該引用不能再進行任何點操作了,若操作則發(fā)生NullPointerException空指針異常。
注:成員變量和局部變量是可以同名的,但是使用的時候默認采取的是就近原則。
引用類型數(shù)組:
? ?- 給引用類型數(shù)組的元素賦值時,必須得new個對象
? ?- 若想訪問對象的數(shù)據(jù)/調(diào)用方法,需要通過數(shù)組元素去打點
繼承:
? ?- 作用:代碼復(fù)用
? ?- 通過extends來實現(xiàn)繼承
? ?- 超類/父類:共有的屬性和行為
? ? ?派生類/子類:特有的屬性和行為
? ?- 派生類可以訪問:派生類的+超類的,而超類不能訪問派生類的
? ?- 一個超類可以有多個派生類,但一個派生類只能繼承一個超類-----單一繼承 具有傳遞性
? ?- java規(guī)定:構(gòu)造派生類之前必須先構(gòu)造超類
? ? ?- 在派生類構(gòu)造方法中若沒有調(diào)用超類構(gòu)造方法,則默認super()調(diào)超類無參構(gòu)造方法
? ? ?- 在派生類構(gòu)造方法中若自己調(diào)用了超類構(gòu)造方法,則不再默認提供
? ? ? ?> 注意:super()調(diào)用超類構(gòu)造方法,必須位于派生類構(gòu)造方法的第一行
3. super:指代當前對象的超類對象
? ?super的用法:
? ?- super.成員變量名------------------------訪問超類的成員變量(一般不用,了解)
? ?- super.方法名()----------------------------調(diào)用超類的方法
? ?- super()--------------------------------------調(diào)用超類的構(gòu)造方法
向上造型:
? ?- 超類型的引用指向派生類的對象
? ?- 能點出來什么,看引用的類型
2. 方法的重寫(override/overriding):重新寫
? ?- 發(fā)生在父子類中,方法名相同,參數(shù)列表相同------派生類中重寫了超類的方法
? ?- 重寫方法被調(diào)用時,看對象的類型
? ?- 重寫需遵循"兩同兩小一大"原則:
? ? ?- 兩同:
? ? ? ?- 方法名相同
? ? ? ?- 參數(shù)列表相同
? ? ?- 兩?。?/p>
? ? ? ?- 派生類方法的返回值類型小于或等于超類方法的
? ? ? ? ?- void和基本類型時,必須相等
? ? ? ? ?- 引用類型時,可以小于或等于
? ? ? ?- 派生類方法拋出的異常小于或等于超類方法的
? ? ?- 一大:
? ? ? ?- 派生類方法的訪問權(quán)限大于或等于超類方法的
3. 重寫與重載的區(qū)別:-------------常見面試題
? ?- 重寫(override):發(fā)生在父子類中,方法名相同,參數(shù)列表相同
? ?- 重載(overload):發(fā)生在同一類中,方法名相同,參數(shù)列表不同
繼承要符合is(是)的關(guān)系
何時向上造型:
? ?- 當多種角色所干的事幾乎一樣時,可以將它們統(tǒng)一造型到一個數(shù)組中,復(fù)用
???-?比如:學生/老師/醫(yī)生都在輸出名字并問好,就將它們統(tǒng)一造型到Person數(shù)組中,一個for即可,實現(xiàn)代碼的復(fù)用
package和import:
? ?- package:聲明包
? ? ?- 作用:避免類的命名沖突
? ? ?- 同包中的類不能同名,不同包中的類可以同名
? ? ?- 類的全稱:包名.類名,包名常常有層次結(jié)構(gòu)
? ? ?- 建議:包名所有字母都小寫
? ?- import:導(dǎo)入類
? ? ?- 同包中的類可以直接訪問的,不同包中的類不能直接訪問,若想訪問:
? ? ? ?- 先import導(dǎo)入類,再使用類----------建議
? ? ? ?- 類的全稱------------------------------------太繁瑣,不建議
訪問控制修飾符:---------------------保護數(shù)據(jù)的安全
? ?- public:公開的,任何類
? ?- private:私有的,本類
? ?- protected:受保護的,本類、派生類、同包類
? ?- 默認的:什么也不寫,本類、同包類---------------------java不建議
? ? ?> 說明:
? ? ?> 1. 類的訪問權(quán)限只能是public或默認的
? ? ?> 2. 類中成員的訪問權(quán)限如上4種都可以
? ? ?> 3. 訪問權(quán)限由大到?。簆ublic>protected>默認的>private
final:最終的、不可改變的-------------單獨應(yīng)用率低
? ?- 修飾變量:變量不能被改變
? ?- 修飾方法:方法不能被重寫
? ?- 修飾類:類不能被繼承?
static:靜態(tài)的
? ?- 靜態(tài)變量:
? ? ?- 由static修飾
? ? ?- 屬于類,存儲在方法區(qū)中,只有一份
? ? ?- 常常通過類名點來訪問
? ? ?- 何時用:所有對象所共享的數(shù)據(jù)(圖片、音頻、視頻等)
? ?- 靜態(tài)方法:
? ? ?- 由static修飾
? ? ?- 屬于類,存儲在方法區(qū)中,只有一份
? ? ?- 常常通過類名點來訪問
? ? ?- 靜態(tài)方法中沒有隱式this傳遞,所以不能直接訪問實例成員
? ? ?- 何時用:方法的操作與對象無關(guān)(不需要訪問對象的數(shù)據(jù))
? ?- 靜態(tài)塊:
? ? ?- 由static修飾
? ? ?- 屬于類,在類被加載時自動執(zhí)行,一個類只被加載一次,所以靜態(tài)塊只執(zhí)行一次
? ? ?- 何時用:初始化/加載靜態(tài)資源(圖片、音頻、視頻等)
訪問權(quán)限常規(guī)使用規(guī)則:
? ?- 實例變量一般都private
? ?- 方法絕大部分情況都是public的,但是若某方法只是我自己用,也是可以private的
? ?- 靜態(tài)的一般都是public
成員變量分兩種:
? ?- 實例變量:沒有static修飾,屬于對象的,存儲在堆中,有幾個對象就有幾份通過引用打點來訪問
? ?- 靜態(tài)變量:由static修飾,屬于類的,存儲在方法區(qū)中,只有一份? 通過類名打點來訪問
內(nèi)存管理:由JVM管理
? ?- 堆:new出來的對象(包括實例變量)
? ?- 棧:局部變量(包括方法的參數(shù))
? ?- 方法區(qū):.class字節(jié)碼文件(包括靜態(tài)變量、所有方法)
?給成員變量賦值規(guī)則:
? ?- 靜態(tài)變量,一般在靜態(tài)塊中初始化
? ?- 實例變量,一般在構(gòu)造方法中初始化