java oop 修飾符&關鍵字

Noah996 發表於 2020-09-15

一、修飾符

Java中四種訪問許可權修飾符:

  • private
  • 預設(default)
  • protected
  • public
  1. 修飾類的成員,用來限定物件對該類成員的訪問許可權。

    修飾符 類內部 同一個包 不同包的子類 同一個工程
    private yes
    預設(default) yes yes
    protected yes yes yes
    public yes yes yes yes
  2. 修飾類

    對於class的許可權修飾符,只可以用public和default(預設)。

    • publice類可以在任意地方被訪問
    • default類只可以被同一個包內部的類訪問

二、關鍵字

Java中的關鍵字有很多,如:

  1. 定義資料型別的關鍵字:
    • byte、short、int、long、float、double、char、boolean
    • class、interface、enum
  2. 用於定義流程控制的關鍵字
    • if、else、switch、case、default、while、do、for
    • break、continue、return
  3. 用於定義訪問許可權修飾符的關鍵字 【我更願意把它歸納為修飾符,但這並不影響,看個人習慣】
    • private、protected、public

今天主要講的是OOP裡面的關鍵字:

  1. this關鍵字

    1. 在Java中,this關鍵字比較難理解,它的作用和其詞義很相近。

      • 它在方法內部使用,即這個方法所屬物件的引用
      • 它在構造器內部使用,表示該建構函式正在初始化的物件。
    2. this可以呼叫類的屬性、方法和構造器。

    3. 什麼時候使用this關鍵字呢?

      • 當方法內需要用到呼叫該方法的物件時,就用this。具體的:我們可以用this來區分屬性和區域性變數。比如:

        this.name=name;
        
  2. super關鍵字

    1. 在Java類中使用super來呼叫父類中的指定操作:
      • super可用於訪問父類中定義的屬性
      • super可用於訪問父類中定義的成員方法
      • super可用於在子類構造器中呼叫父類的構造器
    2. 注意:
      • 尤其是父類中出現同名成員時,可以用super表明呼叫的是父類中的成員
      • super的追溯不僅限於直接父類
      • super和this的用法很相像,this代表本類物件的引用,super代表父類的記憶體空間的標識
  3. this關鍵字和super關鍵字區別

    序號 區別點 this super
    1 訪問屬性 訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查詢 直接訪問父類中的屬性
    2 呼叫方法 訪問本類中的方法,如果本類沒有此方法則從父類中繼續查詢 直接訪問父類中的方法
    3 呼叫構造器 呼叫本類構造器,必須放在構造器的首行 呼叫父類構造器,必須放在子類構造器的首行


  1. static關鍵字

    1. 我們有時候希望無論是否產生了物件或無論產生了多少物件的情況下,某些特定的資料在記憶體空間中只有一份。

    2. 成員變數可分為:

      • 例項變數
      • 類變數
    3. 補充說明:

      如果建立了一個類的多個物件,對於類中定義的非static屬性,每個物件都擁有各自的一套副本,且互不干擾

    4. 如果想讓一個類的所有例項共享資料,就用類變數。

    5. 使用範圍:

      在Java類中,可用static修飾

      • 屬性
      • 方法
      • 程式碼塊
      • 內部類
    6. static修飾屬性:類變數或者靜態變數

      被修飾後的成員具備以下特點:

      • 隨著類的載入而載入。可以通過“類.靜態變數”的方式進行呼叫

      • 優先於物件存在

      • 修飾的成員,被所有物件所共享

      • 訪問許可權允許時,可不建立物件,直接被類呼叫

      • 由於類只會載入一次,則類變數在記憶體中也只會存在一份,存在方法區的靜態域中。

      • 開發中,如何確定一個屬性是否要宣告為static的?

        答:屬性是可以被多個物件所共享的,不會隨著物件的不同而不同的。

    7. static修飾方法:靜態方法或靜態方法

      • 隨著類的載入而載入。可以通過“類.靜態方法”的方式進行呼叫

      • 靜態方法中,只能呼叫靜態的方法或屬性。非靜態方法中,既可以呼叫非靜態方法或屬性,也可以呼叫靜態的方法或屬性。

      • 在靜態方法內,不能使用this、super關鍵字。

      • 開發中,如何確定一個方法是否要宣告為static的?

        答:

         	1. 操作靜態屬性的方法,通常設定為static的
         	2. 工具類中的方法,習慣上宣告為static的。比如:Math、Arrays等
        
  2. final關鍵字

  1. 使用範圍

    • 變數
    • 方法
  2. 使用關鍵字final來修飾表示“最終的”

  3. final修飾類

    1. final修飾的類不能被繼承。提高安全性、提高程式的可讀性。

      如:String類、System類、StringBuffer類

  4. final修飾方法:

    1. final修飾的方法不能被子類重寫。

      如:Object類中的getClass()

  5. final修飾變數(成員變數或區域性變數)即稱為常量。

    1. 名稱大寫,且只能被賦值一次
    2. final標記的成員變數必須在宣告時或在每個構造器中或程式碼塊中顯示賦值,然後才能使用。