首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 修飾符總結(除 final 外):public/protected/private、static、abstract 訪問控制與靜態特性全圖解

     編輯:Java 相關知識

訪問控制修飾符:四級可見性矩陣

修飾符同類同包子類(異包)異包非子類
public✅✅✅✅
protected✅✅✅❌
default (無)✅✅❌❌
private✅❌❌❌

類級別:只能 public 或 default。public 類文件名必須與類名一致,每個文件最多一個 public 類。

static 靜態修飾符:屬於類、不屬於實例

1. 靜態字段(類變量)

  • 類加載時初始化,全 JVM 單份拷貝,所有實例共享。
  • 訪問:ClassName.field(推薦)或 instance.field(不推薦,易誤導)。

2. 靜態方法

  • 類加載時可用,**不能直接訪問非靜態成員**(字段/方法),因為無 this 引用。
  • 常用於工具類、工廠方法、單例獲取。

3. 靜態代碼塊

static {
    // 類加載時執行,僅一次,常用於靜態字段複雜初始化、註冊驅動
}

4. 初始化順序演示

class Parent {
    static { System.out.println("Parent 靜態塊"); }
    { System.out.println("Parent 實例塊"); }
    Parent() { System.out.println("Parent 構造器"); }
}
class Child extends Parent {
    static { System.out.println("Child 靜態塊"); }
    { System.out.println("Child 實例塊"); }
    Child() { System.out.println("Child 構造器"); }
}
public class Test { public static void main(String[] args) { new Child(); } }
/*
輸出順序:
Parent 靜態塊
Child 靜態塊
Parent 實例塊
Parent 構造器
Child 實例塊
Child 構造器
*/

5. 靜態方法隱藏 vs 重寫

  • 父類靜態方法 → 子類定義同簽名靜態方法 = **隱藏**,非多態,調用由 **編譯期類型** 決定。
  • 父類實例方法 → 子類重寫 = **覆蓋**,多態,調用由 **運行期對象** 決定。

abstract 抽象修飾符:規定契約、延遲實現

1. 抽象方法

  • 無方法體,以分號結尾,強制子類實現(除非子類也抽象)。
  • 不能與 private、static、final、synchronized、native 共存。

2. 抽象類

  • 含抽象方法的類**必須**聲明 abstract。
  • 抽象類**可以有構造器**(供子類構造時調用)、**可以有非抽象方法**、**可以無抽象方法**(純為防止實例化)。
  • 不能直接 new 實例化,只能被繼承。

組合使用規則速查

組合合法?說明
abstract + static❌抽象方法無靜態綁定
abstract + final❌final 禁止繼承/重寫,抽象強制重寫
abstract + private❌私有不可繼承
static + final✅編譯期常量 static final int MAX = 100;
final + 類✅不可被繼承
final + 方法✅不可被重寫
final + 字段✅賦值後不可變(引用不可變,對象內部可變)

類加載時機(延遲加載原則)

  1. new 實例化
  2. 調用靜態方法/訪問靜態字段(final 常量除外,編譯期內聯)
  3. 反射 Class.forName、ClassLoader.loadClass
  4. 子類初始化(觸發父類初始化)
  5. 主類啟動(含 main 方法的類)

**不會觸發初始化**:聲明引用、訪問父類靜態字段(子類不初始化)、final 常量讀取。

總結

修飾符是 Java 封裝、繼承、多態的語法基石。熟記 **訪問矩陣、static 初始化順序、abstract 契約語義、final 不可變性、組合禁忌**,即可在代碼審查、面試、架構設計中遊刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved