1. JVM 與「平台無關性」
Java 源碼 → javac → 字節碼 → **JVM** 解釋/編譯執行。JVM 屏蔽底層硬體差異,實現「一次編譯,到處運行」。
2. JDK vs JRE
- JRE:Java Runtime Environment,含 JVM + 核心類庫 + 瀏覽器插件,**運行** Java 程序。
- JDK:Java Development Kit = JRE + 編譯器(
javac) + 工具(javadoc, jdb 等),**開發** Java 程序。
3. static 關鍵字
- 修飾成員變量/方法:**屬於類**,不屬於實例;無實例也可訪問(
ClassName.staticMethod())。
- static 方法不可覆蓋(Override):覆蓋基於運行時動態綁定,static 編譯期靜態綁定。子類同名 static 方法為**隱藏**。
- static 變量類加載時初始化,全實例共享單份拷貝。
4. 數據類型與自動裝箱/拆箱
- 8 大基本類型:
byte, short, int, long, float, double, boolean, char。
- 引用類型:類、介面、陣列、枚舉、注解。
- 自動裝箱:基本類型 → 包裝類(
int → Integer)。
- 自動拆箱:包裝類 → 基本類型。
5. 方法重載 vs 覆蓋
| 特性 | 重載 | 覆蓋 |
| 發生位置 | 同一類內 | 子類 vs 父類 |
| 方法名 | 相同 | 相同 |
| 參數列表 | **必須不同** | **必須相同** |
| 返回類型 | 可不同 | 必須相同/兼容 |
| 綁定時機 | 編譯期靜態 | 運行期動態 |
6. 構造函數
- 新對象創建時調用;無定義則編譯器生成無參構造器。
- 重載:同類多構造器,參數列表唯一。
- 無複製構造函數(C++ 有):Java 不會自動生成;需手工實現
clone() 或拷貝構造器。
7. 繼承機制
- 類:**單繼承**(一個父類)。
- 介面:**多繼承**(多個父介面),實現功能擴展組合。
8. 介面 vs 抽象類
| 維度 | 介面 | 抽象類 |
| 方法 | 隱式 public abstract(JDK 8+ 可有 default/static) | 可有抽象/非抽象方法 |
| 實現/繼承 | implements 多個 | extends 單個 |
| 變量 | 隱式 public static final | 可非 final |
| 構造器 | 無 | 有(供子類鏈調用) |
| 實例化 | 不可 | 不可(含 main 可運行) |
9. 值傳遞鐵律
**Java 僅支援按值傳遞(Call by Value)。**
- 基本類型:傳值拷貝,修改不影響原變量。
- 引用類型:傳**引用的拷貝**(地址值),方法內修改對象**內容**可見,但**重新賦值引用**不影響外部原引用。
void swap(int a, int b) { int t=a; a=b; b=t; } // 無法交換外部變量
void modifyObj(MyObj o) { o.setVal(2); } // 修改內容生效
void reassignObj(MyObj o) { o = new MyObj(); } // 外部引用不變