1. 程式人生 > 其它 >JavaSE_關鍵字 介面 程式碼塊 列舉

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

2 程式碼塊

2.1 構造程式碼塊

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

2.2 靜態程式碼塊

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

2.3 區域性程式碼塊

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

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
  • 組成部分 :

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