Java基礎學習總結筆記

Java基礎

Java常用記憶體區域

  1. 棧記憶體空間:存儲引用堆記憶體空間的地址
  2. 堆記憶體空間:保存每個對象的具體屬性內容
  3. 全局數據區:保存static類型的屬性
  4. 全局程式碼區:保存所有的方法定義

修飾符

許可權修飾符

5

修飾符 同一個類中 同一個包中子類無關類 不同包的子類 不同包的無關類
private
默認
protected
public

狀態修飾符

this關鍵字

  1. 表示該類的屬性變數:this.變數名

  2. 調用本類的構造方法:this()

  3. 表示當前類,可調用成員方法:this.成原方法名()

static關鍵字

  1. 聲明屬性:使之獨立於對象,成為全局屬性(亦稱靜態屬性)
  2. 聲明方法:使之成為”類方法”,可直接通過類名調用:<類名>.<方法名>()
  3. 靜態成員方法只能訪問靜態的成員變數或方法

final關鍵字

  1. final聲明的類不能有子類
  2. final聲明的方法不能被子類覆寫
  3. final修飾的變數
    1. 基本類型:修飾數據值,不能被改變
    2. 引用類型:修飾地址值,地址不可以被改變,地址指向的數據可以改變

繼承

  1. 訪問父類的成員變數:super.變數名

    1. 關鍵字 訪問成員變數 訪問構造方法
      this this.成員變數
      訪問本類成員變數
      this()
      訪問本類構造方法
      super super.成員變數
      訪問父類成員變數
      super()
      訪問父類構造方法
    2. 通過子類對象訪問一個方法

      1. 先在子類範圍內尋找
      2. 再在父類範圍尋找
  2. 子類中所有構造方法被調用時,默認都會先訪問父類無參構造方法

    1. 因為子類會繼承父類中的數據,可能還會使用父類中的數據。所以子類初始化之前,一定要先完成父類數據的初始化
    2. 每一個子類構造方法的第一條語句默認都是super()
    3. 若使用父類帶參構造方法進行數據初始化,即super()
    4. 若父類中沒有無參構造方法,只有帶參構造方法
      1. 用super關鍵字去顯示的調用父類帶參構造方法
      2. 在父類中自己提供一個無參構造方法
  3. 方法重寫

    1. 子類出現了和父類中一模一樣的方法聲明

    2. 應用

      1. 當子類需要父類的功能,而功能的主體子類又自己特有的內容時,可重寫父類中的方法,這樣即沿襲了父類的功能,又定義了子類特有的內容。

      2. 重寫的方法中,可擅用super關鍵字沿襲父類的(基礎)功能

      3. 課用@Override檢測重寫方法是否有誤

      4. 注意事項

        1. 父類中的private方法無法被子類繼承,則無法被重寫

        2. 子類方法訪問許可權不能更低

          (public>默認>protected>private)

    3. Java繼承的注意事項

      1. 一個子類只能單繼承,不支援多繼承
      2. 可實現多層繼承

多態

  1. 在Java中主要有兩種體現形式:

    1. 方法的重載與覆寫(重寫)
    2. 對象的多態性
  2. 成員訪問特點:(為何兩種不一樣:成員方法有重寫)

    1. 成員變數:編譯與執行均看左邊
    2. 成員方法:編譯看左邊,執行看右邊
  3. 優弊

    1. 優勢:提高了程式的擴展性

      ​ 具體體現:定義方法的時候,使用父類型作為參數,將來在使用的時候,使用具體的子類型參與操作

    2. 弊端:不能使用子類的特有功能

  4. 轉型(實現使用子類特有功能)

    1. 向上轉型:從子到父,父類引用指向對象

    2. 向下轉型:從父到子,父類引用轉為子類對象

      用強制類型轉換實現執行子類特有方法(不佔用新的堆記憶體)

抽象類

  1. 概述:

    在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象方法

  2. 特點

    1. 抽象類和抽象方法必須用abstract關鍵字修飾

    2. 抽象類中不一定有抽象方法,由抽象方法的類一定時抽象類

    3. 抽象類不能直接實例化

      如何實例化:參照多態的方法,通過子類對象實例化,這叫做抽象類多態

    4. 抽象類的子類

      要麼重寫抽象類中的所有抽象方法

      要麼本身就是抽象類

  3. 抽象類成員特點

    1. 成員變數:變數/常量

    2. 構造方法:
      不可直接實例化。
      用於子類訪問父類數據的初始化

    3. 成員方法:

      可以有抽象方法:限定子類必須完成某些動作

      也可以有非抽象方法:提高程式碼的復用性

  4. 抽象類名作為形參和返回值

    1. 方法的形參時抽象類名,其實需要的時該抽象類的子類對象
    2. 方法的返回值是抽象類名,其實返回的是該抽象類的子類對象

介面

  1. Java中的介面更多的體現在對行為的抽象

  2. 聲明介面關鍵字:interface

    public interface <介面名>;

    調用介面關鍵字:implements

    public class A implements <介面名>;

    介面是abstract的,亦不可直接實例化

  3. 介面多態

    1. 多態的形式:具體類多態,抽象類多態介面多態
    2. 多態的前提:
      1. 有繼承或者實現關係;
      2. 有方法的重寫/覆寫
      3. 有父類/父介面引用指向子/實現類對象
  4. 成員特點

    1. 成員變數:默認被public static final修飾
  5. 構造方法

    ​ 介面無構造方法,因為介面主要是行為進行抽象的

    一個類如果無父類,默認繼承自Object類

  6. 類和介面的關係

    ​ 一個介面可以implements多個介面

  7. 抽象類和介面的關係

    1. 成員區別

      抽象類 變數,常量;有構造方法;有抽象方法也有非抽象方法
      介面 常量;抽象方法

      2.關係區別

      類與類 只能extends一個父類
      類與介面 可以implements多個介面
      介面與介面 同上

      3.設計理念區別

      抽象類 對象抽象(屬性,行為)
      介面 主要對行為抽象
  8. 介面名作為形參和返回值

    1. 方法的形參是介面名,其實需要的是該介面的實現類對象
    2. 方法的返回值是介面名,其實返回的是該介面的實現類對象

內部類

  1. 訪問特點

    1. 內部類可直接訪問外部類的成員,包括private
    2. 外部類要訪問內部類成員,必須創建對象調用
  2. 成員內部類

    1. 當內部類許可權為public時:

      外界使用內部類格式(外部類名.內部類名):

      例:Outer.Inner oi = new Outer().new Inner();

    2. 當內部類許可權為private時:

      類似於構建getAge和setAge方法。

  3. 局部內部類

    1. 定義在方法內,外界無法直接訪問,需要在方法內部創建對象並使用

    2. 該類可直接訪問外部類的成員,也可訪問方法內的局部變數

    3. 匿名內部類

      1. 前提:存在一個類或介面,類可以時具體類也可抽象類

      2. 格式:

        new 類名或介面名() {
        	重寫方法;
        }
        
      3. 本質:

        是一個繼承了該類或實現了該介面的子類匿名對象

      4. 用例: