瘋狂Java講義-面向?qū)ο螅ㄉ希?/h2>

面向?qū)ο螅ㄉ希?/h1>

本章思維導(dǎo)圖

3-0面向?qū)ο螅ㄉ希?png

類和對象

定義類

[修飾符] class 類名 {
    // 初始化代碼塊
    // 構(gòu)造器
    // 成員變量
    // 方法
}

定義成員變量

[修飾符] 類型 成員變量名 [= 默認值];

  • 修飾符
    • public
    • protected
    • private
    • static
    • final

定義方法

[修飾符] 返回值類型 方法名 ( 形參列表 ) {
    // 方法體
};
  • 修飾符
    • public
    • protected
    • private
    • static
    • final
    • abstract

定義構(gòu)造器

[修飾符] 構(gòu)造器名 ( 形參列表 ) {
    // 構(gòu)造器體
};
  • 修飾符
    • public
    • protected
    • private
  • 構(gòu)造器名:必須和類名相同

對象、引用和指針

  • 引用存儲在棧內(nèi)存
  • 對象存儲在堆內(nèi)存
  • 垃圾回收機制
    • 當(dāng)堆內(nèi)存的對象沒有任何引用變量指向時,java將自動釋放該對象的內(nèi)存
  • this
    • 構(gòu)造器中引用該構(gòu)造器正在初始化的對象
    • 在方法中引用調(diào)用該方法的對象
    • 在方法中this作為返回值返回調(diào)用該方法的對象,可以連續(xù)調(diào)用方法

方法

  • 形參參數(shù)可變的方法
    • type... variable;
      • 多個參數(shù)值被當(dāng)成數(shù)組傳入
    • type[] variable;
      • 參數(shù)傳入時必須是一個數(shù)組的引用類型變量
  • 遞歸方法
  • 方法重載
    • 確定一個方法的三要素
      • 調(diào)用者
      • 方法名
      • 形參列表
    • 要求:同一個類中方法名相同,參數(shù)列表不同

成員變量和局部變量

成員變量

  • 實例變量(不以static修飾)
  • 類變量(以static修飾)

局部變量

  • 形參
  • 方法局部變量
  • 代碼塊局部變量

隱藏和封裝

封裝(encapsulation)

訪問控制符

  • private 當(dāng)前類訪問權(quán)限
  • default 默認:包訪問權(quán)限
  • protected 子類訪問權(quán)限
  • public 公共訪問權(quán)限
    • 源文件名必須和類名相同

package、import、import static

  • package
    • package packageName;
      • 放在第一行
    • 編譯、運行
      • javac -d . fileName.java
      • java pakcageName.className
    • 調(diào)用構(gòu)造器時也需要加上包前綴
    • package.subPackage.ClassName variable = new package.subPackage.ClassName();
  • import
    • 向某個java文件導(dǎo)入指定包層次下的某個類或全部類
    • 導(dǎo)入單個類:
      import package.subPackage...ClassName;
    • 導(dǎo)入全部類:
      import package.subPackage...*;
  • import static
    • 導(dǎo)入指定類的單個或全部的靜態(tài)成員變量、方法
      • 導(dǎo)入指定類的單個靜態(tài)成員變量、方法
      • import static package.subPackage...ClassName.fieldName | methodName;
    • 導(dǎo)入指定類的全部靜態(tài)成員變量、方法
      • import static package.subPackage...ClassName.*;

Java常用包

  • java.lang :Java的核心類,系統(tǒng)自動導(dǎo)入
  • java.util :大量的工具類/接口和集合框架類/接口
  • java.net :網(wǎng)絡(luò)編程相關(guān)的類/接口
  • java.io :輸入/輸出的相關(guān)的類/接口
  • java.text :格式化相關(guān)的類
  • java.sql :進行JDBC數(shù)據(jù)庫編程的相關(guān)類/接口
  • java.awt :抽象窗口工具集的相關(guān)類/接口,主要用于構(gòu)建圖形界面(GUI)程序
  • java.swing :swing圖形用戶界面編程的相關(guān)類/接口,用于構(gòu)建平臺無關(guān)的圖形界面(GUI)程序

構(gòu)造器

使用構(gòu)造器執(zhí)行初始化

構(gòu)造器是一個特殊的方法,這個方法用于創(chuàng)建實例時執(zhí)行初始化

構(gòu)造器重載

使用this在一個構(gòu)造器中調(diào)用另一個構(gòu)造器

this(形參列表);

繼承

[修飾符]  class subClass  extends  superClass{
    // 類體
}

重寫(override)父類的方法

  • 規(guī)則:方法名相同、形參列表相同、子類方法返回值類型應(yīng)比父類更小或相等、子類方法聲明拋出的異常類應(yīng)比父類更小或相等、子類方法的訪問權(quán)限應(yīng)比父類方法更大或相等
  • 覆蓋方法和被覆蓋方法要么都是類方法,要么都是實例方法
  • 調(diào)用父類被覆蓋的方法
    • 實例方法:super.被覆蓋的實例方法()
    • 類方法:父類名.被覆蓋的類方法()

調(diào)用父類構(gòu)造器

  • super(形參列表)
  • 子類總會調(diào)用父類的構(gòu)造器

多態(tài)

引用變量兩種類型:編譯時類型、運行時類型

引用變量在編譯階段只能調(diào)用其編譯時類型的所具有的方法,但運行時則執(zhí)行它運行時類型所具有的方法

子類是特殊的父類,把一個子類對象賦值給父類的引用變量,系統(tǒng)自動完成向上轉(zhuǎn)型

強制類型轉(zhuǎn)換

  • 為了程序健壯性,在強制類型轉(zhuǎn)換前先使用instanceof運算符判斷是否可以轉(zhuǎn)換
  • instanceof運算符
    • 判斷一個對象是否為一個類的實例

繼承與組合

  • 繼承
    • 繼承破壞了父類的封裝性,子類可以直接訪問父類的內(nèi)部信息,造成了子類和父類的耦合,可能會出現(xiàn)子類惡意篡改父類的方法
    • 父類、子類、其他類
      • 父類中那些僅為輔助其他的工具方法,應(yīng)該使用private訪問控制符,不讓子類訪問改方法
      • 父類中的方法需要被外部類調(diào)用,必須使用public修飾,但又不希望子類重寫該方法,可以使用final修飾符
      • 如果希望父類的某個方法被子類重寫,但不希望被其他類自由訪問,使用protected來修飾
      • 不要在父類構(gòu)造器中調(diào)用被子類重寫的方法
  • 在父類構(gòu)造器中調(diào)用了被重寫的方法,在new子類對象的時候,會自動調(diào)用父類構(gòu)造器,在父類構(gòu)造器中調(diào)用的方法時子類的,會引發(fā)一些錯誤
  • 如果僅僅需要復(fù)用一個類,可以用組合

組合

  • 把舊類對象作為新類的成員變量組合進來
  • 繼承表達的是一種“是(is-a)”的關(guān)系,而組合表達的是“有(has-a)”的關(guān)系

初始化塊

初始化塊是類的第4種成員變量,一個類里可以有多個初始化塊,先定義的先執(zhí)行

[修飾符] {
    // 初始化代碼
}

修飾符只能是static

  • 初始化塊在創(chuàng)建對象時執(zhí)行,然后執(zhí)行構(gòu)造器
  • 編譯java類后,會將初始化塊代碼還原到每個構(gòu)造器中,放在最前面
  • 靜態(tài)初始化塊,使用static修飾的初始化塊
  • 靜態(tài)初始化塊實在類初始化階段執(zhí)行,而不是在創(chuàng)建對象時才執(zhí)行
    • 靜態(tài)成員不能訪問非靜態(tài)成員,即不能對實例變量進行初始化

執(zhí)行順序

  • 類初始化階段
    • 最頂層父類的靜態(tài)初始化塊->依次向下->當(dāng)前類的初始化塊
  • 對象初始化階段
    • 最頂層父類的初始化塊->最頂層父類的構(gòu)造器->依次向下->當(dāng)前類初始化塊、當(dāng)前類構(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)容