靜態方法與實例方法的區別不僅是語法層面,更體現了面向對象設計的核心權衡。
| 維度 | 靜態方法 | 實例方法 |
|---|---|---|
| 調用方式 | 類名.方法名() 或 對象.方法名() | 僅 對象.方法名() |
| 訪問成員 | 僅靜態成員(變量/方法) | 靜態 + 實例成員均可 |
// 定義
public class HasStaticMethod {
public static void callMe() { System.out.println("This is a static method."); }
}
// 調用
public class InvokeStaticMethod {
public static void main(String[] args) {
HasStaticMethod.callMe(); // 無需創建對象
new HasStaticMethod().callMe(); // 亦可通過對象調用
}
}
// 輸出兩行 "This is a static method."
典型應用:Math.random()、Arrays.sort() 等工具類方法。
class AccessMember {
private static int sa; // 靜態變量
private int ia; // 實例變量
static void statMethod() {
sa = 10; // ✓ 靜態訪問靜態
otherStat(); // ✓ 靜態調用靜態
ia = 20; // ✗ 編譯錯誤:靜態不可訪問實例變量
insMethod(); // ✗ 編譯錯誤:靜態不可調用實例方法
}
void insMethod() {
sa = 15; // ✓ 實例訪問靜態
ia = 30; // ✓ 實例訪問實例
statMethod(); // ✓ 實例調用靜態
}
}
this 引用,生命周期與類加載綁定,不依賴實例存在this,可訪問對象狀態staticstatic 導致「面向過程」退化