static 表示屬於類而非實例:
class StaticTest {
static int i = 47; // 類級欄位
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
st1.i == st2.i == 47; // 共享同一記憶體
StaticTest.i++; // 推薦:透過類名存取
st1.i == st2.i == 48; // 兩者同步變化
class StaticFun {
static void incr() { StaticTest.i++; }
}
// 兩種呼叫方式
StaticFun sf = new StaticFun();
sf.incr(); // 透過實例(不推薦)
StaticFun.incr(); // 透過類名(推薦,語義清晰)
JVM 啟動時尚未建立任何物件,需直接呼叫 main() 進入程式。這是 static 最關鍵的用途之一。
靜態方法常作為「領頭羊」建立實例:
class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) instance = new Singleton();
return instance;
}
}