JavaSE_關鍵字 介面 程式碼塊 枚舉

1 Java中的關鍵字

1.1 static關鍵字

static特點 :
  • 靜態成員被所在類的所有對象共享
  • 隨著類的載入而載入 , 優先於對象存在
  • 可以通過對象調用 , 也可以通過類名調用 , 建議使用類名
static關鍵字的注意事項
  • 靜態方法中只能調用靜態成員(因為靜態成員隨著類的載入而載入,非靜態成員隨著對象的創建而載入,所以要想訪問非靜態成員可以通過創建對象來調用)
  • 非靜態方法中可以調用任何成員(非靜態成員變數,方法, 靜態成員變數,方法)
  • 靜態方法中不能存在this關鍵字(因為this代表的是對象,靜態成員在載入時還沒有對象)
  • static一般用在工具類中的方法上
局部變數 成員變數 靜態變數
  • 局部變數屬於方法,成員變數屬於對象,靜態變數屬於類

1.2 final關鍵字

  • final關鍵字 : 翻譯中文代表最終的意思 , 是java的一個關鍵字 也是一個修飾符 , 可以修飾類 , 可以修飾方法 , 也可以修飾變數

  • final關鍵字修飾的特點

    • final修飾的類 : 不能被繼承 , 沒有子類
    • fina修飾的方法 : 不能被重寫
    • final修飾的變數 :
      • 基本數據類型 : 值不能改變
      • 引用數據類型 : 地址不可發生改變 , 對象的屬性可改變
      • 注意 :
        • 被final修飾的變數 , 我們叫做自定義常量 , 命名規範 : 每個字母需要大寫 , 多個單詞之間用下劃線分割
        • final修飾成員變數需要注意初始化時機的問題 , 1) 直接賦值 , 2) 在構造方法執行完畢前賦值

1.3 Java中的許可權修飾符

  • public — protected — 默認的 — private
    image

2 程式碼塊

2.1 構造程式碼塊

  • 構造方法塊 : 用一對大括弧表示, 定義在類中方法外
  • 執行時機 : 每次構造方法執行前, 都會執行構造程式碼塊
  • 作用 : 抽取構造方法中共性內容

2.2 靜態程式碼塊

  • 靜態程式碼塊 : 在一對大括弧前加上static關鍵字 , 定義在類中方法外
  • 執行時機 : 隨著類的載入而載入 , 只載入一次
  • 作用 : 一般用於給靜態成員初始化

2.3 局部程式碼塊

image

怎麼找一個變數的作用域?
  • 變數所在的那對大括弧即是作用域範圍

3 介面

3.1 介面的定義和特點

  • 介面的子類我們叫做實現類
    • 要麼重寫介面中所有的抽象方法
    • 要麼實現類是一個抽象類
  • 注意 : 類與介面的關係是實現關係 , 一個類可以實現多個介面,調用逗號分隔 , 還可以繼承一個類的同時 , 實現多個介面 (繼承只能繼承一個類,不能多繼承,可以多層繼承)

3.2 介面的成員特點

  • 成員變數 : 都是常量 , 默認修飾符 public static final ,它們三個的書寫順序可以隨意,但是一般許可權修飾符寫在最前面,static寫在許可權修飾符後面,其餘的寫在static後面
  • 構造方法 : 沒有構造方法
  • 成員方法 : JDK8版本前 只能是抽象方法 , 默認修飾符public abstract

3.5 介面中成員方法的特點

  • DK8版本之前 : 只能是抽象方法
  • JDK8版本 :
    • 默認方法
      • JDK8可以在介面中定義非抽象方法(帶有方法體的方法) , 需要使用default進行修飾 , 其實就是默認方法
      • 作用 : 解決介面升級的問題
      • 格式 : public default 返回值類型 方法名(參數) { … }
      • 注意事項 :
        • 默認方法不是抽象方法 , 可以繼承 , 也可以重寫 , 重寫需要去掉default關鍵字
        • public 可以省略 , default不能省略
        • 如果實現類實現了多個介面 , 有相同的方法聲明 , 那麼實現類必須重寫該方法
    • 靜態方法
      • JDK8可以在介面中定義靜態方法 , 也是有方法體的方法
      • 作用 : 方便調用此功能
      • 格式 : public static 返回值類型 方法名(參數){ … }
      • 注意事項
        • 靜態方法只能通過介面名調用 , 不能通過實現類名字和對象調用
        • public可以省略 , static不能省略
  • JDK9版本 :
    • 私有方法
      • JDK9中新增私有方法
      • 作用 : 抽取默認方法中共性內容
      • 格式 : private 返回值類型 方法名(參數){ … }
      • 注意 : 要想抽取靜態方法中的共性內容 , 需要對私有方法加上關鍵字static
  • 介面可以單繼承,也可以多繼承,還可以多層繼承

4 枚舉

  • 枚舉 : 當一個變數有幾種固定可能的取值時,就可以將它定義為枚舉類型

  • 作用 : 更貼切 , 加見名之意

  • 定義 : public enum 枚舉名{ … }

  • 使用 : 通過枚舉類型名直接引用枚舉項即可,例如Sex.BOY、Sex.GIRL
    注意 : 每個枚舉項都相當於枚舉的對象

  • 案例程式碼

    package com.itheima.enum_demo;
    
    public enum Sex {
        // 每一個枚舉項都是枚舉的對象
        GIRL("女孩"), BOY("男孩");
    
        // 成員變數
        private String name;
    
        // 空參構造方法
        private Sex() {
        }
    
        // 有參構造方法
        private Sex(String name) {
            this.name = name;
        }
    
        // 成員方法
        public String getName() {
            return name;
        }
    }
    
    class Test {
        public static void main(String[] args) {
            System.out.println(Sex.GIRL.getName());
            System.out.println(Sex.BOY.getName());
        }
    }
    
  • 枚舉的本質 :

    • 枚舉其實本質上是一個類,每一個枚舉項是本枚舉類類型的一個對象。我們可以使用JDK提供的反編譯命令,將枚舉的位元組碼進行反編譯查看
      • 枚舉本質上就是最終類
      • 枚舉項,就是枚舉類的對象,而且是靜態的常量。
      • 有私有的構造方法
      • 靜態程式碼塊
      • 繼承了lang包下的Enum
  • 組成部分 :

    • 構造器,成員方法,成員變數等 , 但是定義的成分一定要在枚舉項之後,而且最後一個枚舉項必須要有分號結束。