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

Java 基礎核心:static、final 與泛型機制

     編輯:Java 相關知識

static、final、泛型是 Java 語言的三大基石特性。本文系統梳理其語法規則、語義含義、內存模型、最佳實踐與常見誤區。

final:不可變承諾

修飾目標語義關鍵規則
類不可繼承無子類,方法隱式 final
方法不可重寫可繼承、可重載、編譯期內聯優化
基本類型變量值不可改編譯期常量折疊,必須顯式初始化
引用類型變量引用不可換對象內部狀態仍可修改(如 final List 可 add)
構造器❌ 不可修飾構造器本身不被繼承,無 final 必要

final 變量初始化時機

  • 實例變量:構造器結束前(可在聲明處/實例塊/構造器中初始化)
  • 靜態變量:類初始化階段(聲明處/靜態塊)
  • 局部變量:首次賦值前(編譯器數據流分析保證)

static:類級別靜態成員

核心特性

  • 屬於類: 不依賴實例,類加載時在方法區分配內存
  • 共享唯一: 所有實例共享同一份拷貝
  • 訪問限制: 靜態方法只能訪問靜態成員,不可用 this/super
  • 加載順序: 父類靜態 → 子類靜態 → 父類實例 → 子類實例

靜態代碼塊


static {
    // 類加載時執行,僅一次
    // 用途:初始化靜態資源、加載原生庫、註冊驅動
    System.loadLibrary("native-lib");
    CONFIG = loadConfig();
}

多個靜態塊按聲明順序執行,可穿插在靜態字段之間。

經典組合:private static final


private static final String CONSTANT = "VALUE";
// 編譯期常量折疊,字節碼中直接內聯常量值
// 類初始化時賦值,線程安全(JVM 類加載鎖保證)

泛型:類型參數化

核心價值

  • 編譯期類型安全: 避免運行時 ClassCastException
  • 消除強轉: List list = ...; String s = list.get(0); 無需 (String)
  • 代碼復用: 一份邏輯服務多種類型

類型擦除機制

  • 泛型信息僅存在編譯期,運行期擦除為原始類型(Raw Type)
  • List → List,T → Object(無界限)或 Bound(有界限)
  • 橋接方法自動生成保證多態性

通配符與邊界

語法含義適用場景
上界通配符(生產者)只讀取,如 copy(List src)
下界通配符(消費者)只寫入,如 fill(List dst)
無界通配符類型無關操作,如 size(), clear()

PECS 原則

Producer Extends, Consumer Super
從集合讀取元素 → 用 extends;向集合寫入元素 → 用 super。

常見誤區

  • ❌ new ArrayList(); 右側鑽石操作符 JDK7+ 可省略類型參數
  • ❌ 泛型數組創建:new List[10] 編譯錯誤 → 用 List>
  • ❌ 靜態成員引用類型參數:static T field; 非法
  • ❌ instanceof List 非法 → 用 instanceof List
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved