1991 年,Sun Microsystems 的 James Gosling 等人為了互動式電視、烤麵包機等嵌入式裝置開發了 Oak 語言。當時反應平平,直到 1994 年網際網路與 WWW 爆發式增長,Sun 重新定位 Oak 為網路程式語言,更名為 Java,並推出支援 Applet 的 HotJava 瀏覽器。1995 年獲《PC Magazine》評為「年度十大科技產品」,微軟、IBM、Netscape 等巨頭紛紛購買授權,比爾·蓋茨更讚譽其為「長久以來最傑出的程式設計語言」,並據此調整微軟戰略轉向網路中心運算。
涵蓋物件導向應用開發、可視化計算、動態圖形/動畫、互動操作設計、Web/Intranet 系統管理、資料庫 SQL 整合等八大領域,被預言為網路上的「世界語」。
| 特性 | 核心說明 |
|---|---|
| 簡單性 | 移除運算子多載、多重繼承等複雜概念;自動垃圾回收簡化記憶體管理;核心解釋器 + 基礎類庫僅約 215 KB,適合嵌入式裝置。 |
| 物件導向 | 封裝狀態與行為,支援介面與單繼承,透過介面實現多型與鬆耦合。 |
| 分散式 | 標準庫內建 TCP/IP、URL、Socket 支援,輕鬆存取網路資源。 |
| 健壯性 | 編譯期與執行期雙重檢查;自動 GC 避免記憶體錯誤;例外處理機制強制開發者面對錯誤情境。 |
| 安全性 | 無指標操作,記憶體存取受管控;類載入器隔離本地與網路代碼;安全管理員限制敏感操作。 |
| 架構中立 | 編譯為平台無關的位元組碼,經 JVM 解釋執行,屏蔽硬體差異。 |
| 可移植性 | 基本型別大小固定(int 永遠 32 位);編譯器本身用 Java 撰寫,運行時系統用 ANSI C 實現,自我宿主化。 |
| 解釋執行 | 位元組碼攜帶豐富編譯期資訊,連結過程輕量快速。 |
| 高效能 | JIT (Just-In-Time) 編譯器可將熱點位元組碼動態轉為原生機器碼,逼近 C/C++ 效能。 |
| 多執行緒 | 語言層面內建 Thread、synchronized、wait/notify,簡化併發程式設計。 |
| 動態性 | 執行期載入類別、動態連結;介面支援多實現,比單繼承更靈活。 |
Applet 嵌入 HTML,透過瀏覽器下載執行。具備安全沙箱機制,可接收使用者輸入、動態繪圖、播放多媒體,超越靜態圖片/聲音格式。雖然現代瀏覽器已淘汰 Applet 支援,但其「跨平台網路元件」概念深啟發後續 Web 技術演進。
java.lang:字串、執行緒、例外、數學運算等基礎。java.util:集合框架 (HashMap, ArrayList)、日期時間、隨機數等工具類。java.io:統一「流」模型處理檔案、網路、管道 I/O。java.net:Socket 程式設計、URL 連線、協定處理器。java.awt / javax.swing:跨平台 GUI 元件 (視窗、選單、表格...)。java.applet:Applet 生命週期管理。| 項目 | C/C++ | Java | 影響 |
|---|---|---|---|
| 全域變數 | 任意處宣告 | 僅能透過 public static 類別欄位模擬 | 強制封裝,減少副作用 |
| goto | 支援 | 保留字但不可用,改用例外處理 | 結構化程式設計 |
| 指標 | 直接記憶體操作 | 完全移除,參考型別取代 | 消除緩衝區溢位、野指標漏洞 |
| 記憶體管理 | malloc/free, new/delete 手動 | new 配置堆疊,GC 自動回收 | 杜絕記憶體洩漏、重複釋放 |
| 基本型別大小 | 平台相關 (int 16/32 位) | 固定 (int 32 位, long 64 位) | 跨平台行為一致 |
| 型別轉換 | 指標強制轉換任意 | 執行期檢查相容性 | 型別安全 |
| 標頭檔 | .h/.hpp 分離宣告 | 無標頭檔,類別定義即宣告 | 簡化建構、避免版本不一致 |
| 結構/聯集 | 支援,成員預設 public | 無,全部封裝於類別 | 統一存取控制 |
| 前置處理器 | #define, #ifdef 宏 | 無宏,用 final 常數取代 | 除錯可讀性提升 |
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
HelloWorldApp.java,編譯 javac HelloWorldApp.java 產生 .class,執行 java HelloWorldApp。main 為 JVM 入口,必須為 public static void,參數 String[]。import java.awt.*;
import java.applet.*;
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World!", 20, 20);
}
}
main,繼承 Applet 並覆寫 paint(Graphics)。<applet code="HelloWorldApplet.class" width=200 height=40></applet>。appletviewer Example.html 或支援 Java 的瀏覽器執行。小結:Java 程式由類別組成,應用程式需 main 入口,Applet 需繼承 Applet。基本語法 (運算子、控制結構) 與 C/C++ 高度相似,後續章節將深入探討新增特性。