static 表示「屬於類而非實例」,生命周期與類加載綁定,而非對象創建。
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
ClassName.staticVar (推薦) 或 obj.staticVar (不推薦)public class MathUtils {
public static int max(int a, int b) { // 無需實例化
return a > b ? a : b;
}
}
// 調用: MathUtils.max(3, 5);
public class DatabaseConfig {
static String URL;
static {
// 類加載時執行一次,初始化靜態資源
URL = loadFromConfigFile("db.url");
System.out.println("靜態塊執行");
}
}
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 可被繼承重寫 | 只能隱藏,非多態 |