首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java static 關鍵字深度解析:靜態變量、方法、塊、內部類

     編輯:程式設計綜合問答

核心概念

static 表示「屬於類而非實例」,生命周期與類加載綁定,而非對象創建。

四大用法詳解

1. 靜態變量 (類變量)

public class Counter {
    static int count = 0;  // 所有實例共享
    int instanceCount = 0; // 每個實例獨有
    
    public void increment() {
        count++;        // 共享計數器
        instanceCount++;// 實例計數器
    }
}

// 測試
Counter c1 = new Counter(); c1.increment(); // count=1, instanceCount=1
Counter c2 = new Counter(); c2.increment(); // count=2, instanceCount=1
  • 內存區域:方法區 (JDK 8 後為元空間)
  • 初始化順序:按聲明順序,早於構造函數
  • 訪問方式:ClassName.staticVar (推薦) 或 obj.staticVar (不推薦)

2. 靜態方法

public class MathUtils {
    public static int max(int a, int b) {  // 無需實例化
        return a > b ? a : b;
    }
}
// 調用: MathUtils.max(3, 5);
  • 限制:不能直接訪問非靜態成員 (this 不存在)
  • 不能重寫:子類同名靜態方法為隱藏,非多態
  • 常用場景:工具類、工廠方法、單例模式

3. 靜態代碼塊

public class DatabaseConfig {
    static String URL;
    static {
        // 類加載時執行一次,初始化靜態資源
        URL = loadFromConfigFile("db.url");
        System.out.println("靜態塊執行");
    }
}
  • 執行時機:類首次被主動使用時 (new、訪問靜態成員、反射等)
  • 用途:靜態資源初始化、註冊驅動、加載配置

4. 靜態內部類


public class Outer {
    static class StaticInner {  // 不持有外部類引用
        void print() { System.out.println("Static Inner"); }
    }
    class NonStaticInner {      // 隱含持有 Outer.this
        void print() { System.out.println("Non-static Inner"); }
    }
}

// 使用
Outer.StaticInner si = new Outer.StaticInner(); // 無需 Outer 實例
Outer.NonStaticInner nsi = new Outer().new NonStaticInner(); // 需外部實例

常見誤區

誤區正確理解
static 變量是「全局變量」類級共享,但有訪問權限控制 (private 等)
static 方法可調用 this無 this,屬於類
static 可被繼承重寫只能隱藏,非多態
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved