對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
- 枚舉其實本質上是一個類,每一個枚舉項是本枚舉類類型的一個對象。我們可以使用JDK提供的反編譯命令,將枚舉的位元組碼進行反編譯查看
-
組成部分 :
- 構造器,成員方法,成員變數等 , 但是定義的成分一定要在枚舉項之後,而且最後一個枚舉項必須要有分號結束。