第 19 課進入平台語言核心議題:Java 與 C#。冒號老師從「平台」定義切入,系統比較兩大語言的共同遺產、相互借鑒、核心差異與商業策略,揭示語言選擇背後的技術與商業邏輯。
區分兩種平台:
Java/C# 獨立於前者,正是因為自帶後者。句號比喻:「在不同山路上鋪同樣瀝青,車子跑起來都一樣。」
| 改良方向 | 具體措施 |
|---|---|
| 編譯目標 | 機器無關位元碼/Bytecode,跑在虛擬機上 |
| 記憶體管理 | 禁用/限用指標,自動垃圾回收(GC),釋放生產力 |
| 安全性 | 邊界檢查、型別安全、禁止未初始化變數、資源安全管理(using/finally) |
| 簡化語法 | 移除頭文件/巨集、支援介面、廢除多重繼承、移除生僻難用語法 |
| 更純粹 OO | 無全域變數/自由函數、所有類繼承 Object、物件多在 Heap 配置 |
| 豐富標準庫 | 反射、多執行緒、GUI、網路 API 內建 |
| 標準化 | Unicode 內建、文件註解、Deprecated 機制 |
| 平台中立 | 編譯為中間碼、統一運行平台 |
註:Java JDK 免責聲明明確不適用於空管、核電等即時系統;C# 則透過 P/Invoke、保留指標、`unsafe` 區塊積極進軍系統程式領域(Singularity OS 專案)。
| Java | C# | 備註 |
|---|---|---|
| super | base | |
| import | using | |
| package | namespace | |
| synchronized | lock | |
| instanceof | is | |
| deprecated | obsolete | |
| final | sealed | |
| native | extern | |
| boolean | bool | C# 更簡潔,但避嫌意味濃厚 |
設計者 Anders Hejlsberg 曾任 Delphi、Visual J++ 架構師,微軟與 Sun 因 J++ 官司結怨,寧強調 C++ 淵源、淡化 Java 關係。
for (T t : coll))struct 分配在 Stack,效能優化關鍵。ref/out 關鍵字。冒號評價:大多為明智之舉,兼顧效能與表達力。
歎號嘆:C# 比 Java 複雜多了。冒號回應:Java 初衷是「簡單親和」,C# 則追求「魚與熊掌兼得」。語言在威力與生產力間尋找平衡點,現代傾向全拿。
Java 目標:一種語言跑遍多平台(Write Once, Run Anywhere)。
C# 目標:多語言跑在一平台(.NET 支援 VB.NET、F#、IronPython...)。
句號總結:Windows 專屬應用選 C#(原生整合、ASP.NET/ADO.NET/WinForms);跨平台企業應用選 Java。冒號補充:Java 生態同樣豐富(Spring 生態、動態語言無縫嵌入 Groovy/Scala/JRuby/Jython)。
冒係隱喻收尾:
C++:一馬平川大路,也有陷阱密布小徑。
Java:大路鋪水泥,封鎖捷徑小徑。
C#:填平大路坑洞,把小徑「此路不通」牌子偷換成「此路危險」。