從 Oak 到 Java:歷史脈絡
- 1991:Sun 公司 James Gosling 團隊啟動「Green 專案」,目標是家電控制器的跨平台語言,命名 Oak。
- 1994:家電市場未如預期,專案近乎終止。
- 1995.05.23:Internet 爆發,團隊發現 Oak 完美契合「網路分散式環境」,更名 Java 並釋出 JDK 1.0,內建於 Netscape Navigator。
- 後續版本演進:JDK 1.2 → Java 2 (J2SE)、JDK 5.0 引入泛型、註解、自動裝箱等現代特性。
語言演進脈絡:C → C++ → Java
Java 繼承 C 語法、C++ 物件導向,並移除易錯特性(指標、多重繼承、運算子多載、預處理器),加入自動記憶體管理與異常處理,成為「程式設計師的語言」。
Java 八大核心特性
- 簡單:語法清晰,移除指標/多重繼承,內建 GC。
- 物件導向:封裝、繼承、多型,類別與介面機制完善。
- 穩健與安全:嚴格型別檢查、編譯期/執行期雙重檢查、GC 避免記憶體洩漏、異常處理機制、沙箱模型保護 Applet。
- 多執行緒:內建
Thread、synchronized、java.util.concurrent,支援高併發。
- 架構中立與可攜性:編譯為位元碼,JVM 屏蔽硬體差異,「一次編譯,到處執行」。
- 解釋執行與高效能:JIT 編譯器將熱點位元碼轉為機器碼,效能接近 C++。
- 分散式:
java.net、RMI、HTTP Client 原生支援網路程式設計。
- 動態性:執行期載入類別、支援介面多重實作、適應不斷演進的環境。
Java vs C++ 關鍵差異表
| 項目 | Java | C++ |
| 物件模型 | 純物件導向(基本型別除外) | 支援全域函數/變數 |
| 指標 | 無直接指標操作 | 完整指標算術 |
| 多重繼承 | 介面多重實作 | 類別多重繼承 |
| 記憶體管理 | 自動 GC | 手動 new/delete |
| 字串 | String 物件,+ 串接 | 字元陣列/std::string |
| 異常 | 檢查型/非檢查型異常體系 | 無標準化機制 |
| 運算子多載 | 不支援 | 支援 |
| 預處理器 | 無(用 import) | #define / #include |
總結
Java 不是 C++ 的「增強版」,而是為網路分散式環境重新設計的語言。它犧牲部分底層控制力,換取開發效率、安全性與跨平台能力,成為企業級應用、Android 開發、大數據生態的主流選擇。