OutOfMemoryError、StackOverflowError),應用無法恢復,不應捕獲處理。IOException、NullPointerException),可通過 try-catch 處理並恢復。| 維度 | Abstract Class | Interface |
|---|---|---|
| 方法實現 | 可有具體方法與抽象方法 | Java 8 前全抽象;8+ 支持 default/static 私有方法 |
| 繼承關係 | 單繼承(extends) | 多實現 |
| 構造器 | 可有構造器(供子類調用) | 無構造器 |
| 成員變量 | 任意修飾符 | 隱含 public static final |
| 適用場景 | "is-a" 關係,共享代碼 | "can-do" 能力,定義契約 |
abstract 方法不能同時是 static、native、synchronized。
static 屬於類,無多態;abstract 要求子類實現,矛盾。native 由本地代碼實現;abstract 無方法體,語義衝突。synchronized 是實現細節,不屬於方法簽名,接口/抽象方法不可標註。extends)。implements),無需實現所有方法。start():啟動新線程,由 JVM 調度執行 run()。run():普通方法調用,仍在當前線程執行,不具備多線程特性。構造器不屬於繼承體系,子類無法覆蓋父類構造器,但可重載多個構造器。
一個對象的 synchronized 方法同一時間僅允許一個線程進入。其他線程嘗試進入該對象的任意 synchronized 方法均會阻塞(鎖對象為 this)。
int result = 2 << 3; // 左移 3 位 = 乘以 2^3 = 8,結果 16
位運算效率高於乘法指令,嵌入式/高性能場景常用。
錯誤觀點:兩個對象 equals 相等,hashCode 可以不同。
正確規則:equals(true) ⇒ hashCode 必須相等。違反將導致 HashMap/HashSet 失效。
Java 只有值傳遞。傳遞對象時,傳的是「引用的副本」。方法內可修改對象內部狀態,但無法改變外部引用指向。
| 版本 | 支持類型 |
|---|---|
| Java 1.0~6 | int, short, char, byte, enum |
| Java 7 | + String |
| Java 12+ | + switch 表達式、模式匹配 |
| 長期不支持 | long, float, double, boolean |
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return INSTANCE; }
}
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
}
}
return instance;
}
}
public class Singleton {
private Singleton() {}
private static class Holder { static final Singleton INSTANCE = new Singleton(); }
public static Singleton getInstance() { return Holder.INSTANCE; }
}
| 特性 | HashMap | Hashtable |
|---|---|---|
| 線程安全 | 非同步,高併發需外部同步或用 ConcurrentHashMap | 方法級 synchronized,性能低 |
| Null 鍵值 | 允許一個 null key、多個 null value | 不允許 null |
| 繼承體系 | 實現 Map 接口 | 繼承 Dictionary 類(已過時) |
| 遍歷方式 | Iterator (fail-fast) | Enumerator + Iterator |
| contains 方法 | 分為 containsKey/containsValue | 單一 contains 易混淆 |