Java是 一 個 廣 泛 使 用 的 網 絡 編 程 語 言 ,它 是 一 種 新 的 計算概 念 。
首 先 ,作 為 一 種 程 序 設 計 語 言 ,它 簡 單 、 面向對象 、 不依 賴於 機 器 的 結 構 、具 有 可 移 植 性 、 魯 棒 性 、 安 全 性 、 並 且提 供 了 並 發 的 機 制 、具 有 很 高 的 性 能。
其 次 ,它 最 大 限 度 地 利 用 了 網 絡 ,Java的小應用程序(applet) 可在網 絡 上 傳 輸 而 不受 CPU和 環 境 的 限 制 。 另 外 ,Java還 提 供 了 豐富 的 類 庫 ,使 程 序 設計 者 可 以 很 方 便地 建 立 自 己 的 系 統 。
下 面 我 們 分 別 從 這 三 個 方 面 來 討 論 Java的 特 點 ,然 後通 過把 Java與 C,C++相 比進 一 步 指 出 它 所 具 有 的 優 點 。
一 、 Java語 言
Java語 言 有 下 面 一 些 特 點 :簡 單 、 面 向 對 象 、 分 布 式 、解釋 執 行 、 魯 棒 、安 全 、 體 系 結 構 中 立 、 可 移 植 、 高 性 能、 多 線 程 以 及 動 態 性。
1.簡 單 性
Java語 言 是 一 種 面 向 對 象 的 語 言 ,它 通 過 提 供 最 基 本 的方法 來 完 成 指 定 的任 務 ,只 需 理 解 一 些 基 本 的 概 念 ,就 可 以用 它 編 寫 出 適 合 於 各種 情 況 的 應 用 程 序。 Java略 去了 運 算 符重 載 、 多 重 繼 承 等 模 糊 的 概 念 ,並 且 通 過實 現 自 動 垃 圾 收集大 大 簡 化 了 程 序 設 計 者 的 內 存 管 理 工 作 。 另 外 ,Java也 適合於 在 小 型 機 上 運行 ,它 的 基 本 解 釋 器 及 類 的 支 持 只 有 40KB左右 ,加 上 標 准 類 庫 和線 程 的 支 持 也 只 有 215KB左 右 。 庫 和 線程 的 支 持 也 只 有 2 15KB左 右 。
2.面 向 對 象
Java語 言 的 設 計 集 中 於 對 象 及 其 接 口 ,它 提 供 了 簡 單 的類機 制 以 及 動 態 的接 口 模 型 。 對 象 中 封 裝 了 它 的 狀 態 變 量以 及 相 應 的 方 法 ,實現 了 模 塊 化 和 信 息隱 藏 ;而 類 則 提 供 了一 類 對 象 的 原 型 ,並 且 通 過 繼 承 機 制 ,子 類可 以 使 用 父 類 所提供 的 方 法 , 實 現 了 代 碼 的 復 用 。
3.分 布 性
Java是 面 向 網 絡 的 語 言 。 通 過 它 提 供 的 類 庫 可 以 處 理TCP/IP協議 ,用 戶 可 以通 過 URL地 址 在 網 絡 上 很 方 便 地 訪 問 其 它 對 象。
4.魯 棒 性
Java在 編 譯 和 運 行 程 序 時 ,都 要 對 可 能 出 現 的 問 題 進 行檢查 ,以 消 除 錯 誤 的產 生 。 它 提 供 自 動 垃 圾 收 集 來 進 行 內存 管 理 ,防 止 程 序 員 在管 理 內 存 時 容 易 產生 的 錯 誤 。 通 過集 成 的 面 向 對 象 的 例 外 處 理 機 制 ,在 編 譯 時,Java提 示 出 可能 出現 但 未 被 處 理 的 例 外 ,幫 助 程 序 員 正 確 地 進 行 選 擇 以防 止 系統 的 崩 潰 。 另 外,Java在 編 譯 時 還 可 捕 獲 類 型 聲 明 中的 許 多 常 見 錯 誤 ,防 止 動 態運 行 時 不 匹 配 問題 的 出 現 。
5.安 全 性
用 於 網 絡 、 分 布 環 境 下 的 Java必 須 要 防 止 病 毒 的 入 侵 。Java 不 支 持 指 針 ,一切 對 內 存 的 訪 問 都 必 須 通 過 對 象 的 實 例 變量 來 實 現 ,這 樣 就防 止 程 序 員 使 用 "特洛 伊 " 木 馬 等欺 騙 手 段 訪 問 對 象 的 私 有 成 員 ,同 時 也 避 免 了指 針 操 作 中容 易 產 生的 錯 誤 。
6.體 系 結 構 中 立
Java解 釋 器 生 成 與 體 系 結 構 無 關 的 字 節 碼 指 令 ,只 要 安裝了 Java運 行 時 系 統,Java程 序 就 可 在 任 意 的 處 理 器 上 運 行 。這 些 字 節 碼 指 令 對 應於 Java虛 擬 機 中 的表 示 ,Java 解 釋 器 得到 字 節 碼 後 ,對 它 進 行 轉 換 ,使 之 能 夠 在 不同 的 平 台 運 行 。
7.可 移 植 性
與 平 台 無 關 的 特 性 使 Java程 序 可 以 方 便 地 被 移 植 到 網 絡上的 不 同 機 器 。同 時 ,Java的 類 庫 中 也 實 現 了 與 不 同 平 台 的 接口 ,使 這 些 類 庫 可以 移 植 。 另 外 ,Java編 譯 器 是 由 Java語 言 實現 的 ,Java運 行 時 系 統 由 標 准 C實 現 ,這使 得 Java系 統 本 身 也具有 可 移 植 性 。
8.解 釋 執 行
Java解 釋 器 直 接 對 Java字 節 碼 進 行 解 釋 執 行 。 字 節 碼 本身攜 帶 了 許 多 編 譯時 信 息 ,使 得 連 接 過 程 更 加 簡 單 。
9.高 性 能
和 其 它 解 釋 執 行 的 語 言 如 BASIC、 TCL不 同 ,Java字 節 碼 的 設計使 之 能 很 容 易地 直 接 轉 換 成 對 應 於 特 定 CPU 的 機 器 碼 ,從 而得 到 較 高 的 性 能。
10.多 線 程
多 線 程 機 制 使 應 用 程 序 能 夠 並 行 執 行 ,而 且 同 步 機 制 保證了 對 共 享 數 據 的正 確 操 作 。 通 過 使 用 多 線 程 ,程 序 設 計 者可 以 分 別 用 不 同 的線 程 完 成 特 定 的 行為 ,而不 需 要 采 用 全 局的 事 件 循 環 機 制 ,這 樣 就 很 容 易 地 實 現 網 絡 上 的 實 時 交 互行為 。
11.動 態 性
Java的 設 計 使 它 適 合 於 一 個 不 斷 發 展 的 環 境 。 在 類 庫 中可以 自 由 地 加 入新 的 方 法 和 實 例 變 量 而 不 會 影 響 用 戶 程 序的 執 行 。 並 且Java通 過 接 口 來 支 持 多重 繼 承 ,使 之 比 嚴 格 的類 繼 承 具 有 更 靈 活 的 方 式 和 擴 展 性 。
二 、 Java Applet
Java語 言 的 特 性 使 它 可 以 最 大 限 度 地 利 用 網 絡 。 Applet是Jav a的 小 應 用 程序 ,它 是 動 態 、 安 全 、 跨 平 台 的 網 絡 應 用 程 序。 Java Applet嵌 入Html語 言 ,通 過 主頁 發 布 到 Internet。 網 絡 用 戶訪 問 服 務 器 的Applet時 ,這些Applet 從網 絡 上 進 行 傳 輸 ,然 後 在支 持 Java 的 浏 覽 器 中 運 行 。 由 於 Java語 言 的 安 全 機 制,用 戶一 旦 載 入Applet,就 可 以 放 心 地 來 生 成 多 媒 體 的 用 戶 界 面 或完 成 復 雜 的計 算 而 不 必 擔 心 病毒 的 入 侵 。 雖 然 Applet可 以 和圖 像 、 聲 音 、 動 畫 等 一 樣 從 網 絡上 下 載 ,但 它 並 不同 於 這些 多 媒 體 的 文 件 格 式 ,它 可 以 接 收 用 戶 的 輸 入 ,動 態 地進 行改 變 ,而 不 僅 僅是 動 畫 的 顯 示 和 聲 音 的 播 放 。
三 、 豐 富 的 類 庫
Java提 供 了 大 量 的 類 以 滿 足 網 絡 化 、 多 線 程 、 面 向 對 象系統 的 需 要 。
1.語 言 包 提 供 的 支 持 包 括 字 符 串 處 理 、 多 線 程 處 理 、例外 處 理 、 數 學 函數 處 理 等 ,可 以 用 它 簡 單 地 實 現 Java 程 序的 運 行 平 台 。
2.實 用 程 序 包 提 供 的 支 持 包 括 哈 希 表 、 堆 棧 、 可 變 數組、 時 間 和 日 期 等。
3.輸 入 輸 出 包 用 統 一 的 "流 "模 型 來 實 現 所 有 格式 的 I/O,包括 文 件 系 統 、 網 絡、 輸 入 /出 設 備 等 。
4.低 級 網 絡 包 用 於 實 現 Socket編 程 。
5.抽 象 圖 形 用 戶 接 口 包 實 現 了 不 同 平 台 的 計 算 機 的 圖形用 戶 接 口 部 件 ,包括 窗 口 、 菜 單 、 滾 動 條 、 對 話 框 等 ,使得 Java可 以 移 植 到 不 同平 台 的 機 器 。
6.網 絡 包 支 持 Internet的 TCP/IP協 議 ,提 供 了 與 Internet的 接 口。它 支 持 URL連 接,WWW的 即 時 訪 問 ,並 且 簡 化 了 用 戶 /服 務 器 模型 的 程 序 設 計 。
四 、 Java學習和C語言學習、 C++
對 於 變 量 聲 明 、 參 數 傳 遞 、 操 作 符 、 流 控 制 等 ,Java 使用了 和 C、 C++相 同的 傳 統 ,使 得 熟 悉 C、 C++的 程 序 員 能 很 方 便地 進 行 編 程 。 同 時,Java為 了 實 現 其簡 單 、 魯 棒 、 安 全 等 特性 ,也 摒 棄 了 C和 C++中 許 多 不 合 理 的 內容 。
1.全 局 變 量
Java程 序 中 ,不 能 在 所 有 類 之 外 定 義 全 局 變 量 ,只 能 通 過在一 個 類 中 定 義 公用 、 靜 態 的 變 量 來 實 現 一 個 全 局 變 量 。例 如 :
Class GlobalVar{
public static global_var;
}
在 類 GlobalVar中 定 義 變 量 global_var為 public stat-ic,使 得 其 它類可 以 訪 問 和 修 改該 變 量 。
Java對 全 局 變 量 進 行 了 更 好 的 封 裝 。 而 在 C和 C++中 , 依 賴於不 加 封 裝 的 全局 變 量 常 常 造 成 系 統 的 崩 潰 。
2.Goto
Java不 支 持 C、 C++中 的 goto語 句 ,而 是 通 過 例 外 處 理 語 句 try,Ca tch, final等 來 代替 C、 C++中 用 goto來 處 理 遇 到 錯 誤 時 跳 轉 的情 況 ,使 程 序 更 可 讀且 更 結 構 化 。
3.指 針
指 針 是 C、 C++中 最 靈 活 ,也 是 最 容 易 產 生 錯 誤 的 數 據 類型。 由 指 針 所 進 行的 內 存 地 址 操 作 常 會 造 成 不 可 預 知 的 錯誤 ,同 時 通 過 指 針 對某 個 內 存 地 址 進 行顯 式 類 型 轉 換 後 ,可以 訪 問 一 個 C++中 的 私 有 成 員 ,從 而 破 壞 安全 性 ,造 成 系 統 的崩 潰 。 而 Java 對 指 針 進 行 完 全 的 控 制 ,程 序 員 不 能 直 接進行 任 何 指 針 操 作 ,例 如把 整 數 轉 化 為 指 針 ,或 者 通 過 指 針釋放 某 一 內 存 地 址 等 。 同時 ,數 組 作 為 類 在Java中 實 現 ,良 好 地解 決 了 數 組 訪 問 越 界 這 一 C、 C++中 不 作 檢 查的 錯 誤 。
4.內 存 管 理
在 C中 ,系統管理 員 通 過 庫 函 數 malloc()和 free()來 分 配 和 釋 放 內存 , C++中 則 通 過 運算 符 new和 delete來 分 配 和 釋 放 內 存 。 再 次 釋放 已 釋 放 的 內 存 塊或 未 被 分 配 的 內存 塊 ,會 造 成 系 統 的 崩潰 ;同 樣 ,忘 記 釋 放 不 再 使 用 的 內 存 塊 也會 逐 漸 耗 盡 系 統資源 。 而 在 Java中 ,所 有 的 數 據 結 構 都 是 對 象 , 通 過 運 算 符 new為它們 分 配 內 存 堆。 通 過 new得 到 對 象 的 處 理 權 ,而 實 際 分 配 給對 象 的 內 存 可 能隨 程 序 運 行 而 改變, Java對 此 自 動 地 進 行 管理 並 且 進 行 垃 圾 收 集 ,有 效 防 止 了 由 於程 序 員 的 誤 操 作而導 致 的 錯 誤 ,並 且 更 好 地 利 用 了 系 統 資 源 。
5.數 據 類 型 的 支 持
在 C、 C++中 ,對 於 不 同 的 平 台 ,編 譯 器 對 於 簡 單 數 據 類 型如in t,float等 分 別 分配 不 同 長 度 的 字 節 數 ,例 如 :int在 IBM PC中為 16位 ,在 VAX-11中 為32位 ,這 導 致 了 代 碼的 不 可 移 植 性 ,但 在 Java中 ,對 於 這 些 數 據 類 型 總 是 分 配 固 定 長 度 的 位 數 ,如 對 int型 ,它 總 占 32位 ,這 就 保 證 了 Java的 平 台 無 關 性 。
6.類 型 轉 換
在 C、 C++中 ,可 以 通 過 指 針 進 行 任 意 的 類 型 轉 換 ,常 常 帶來不 安 全 性 ,而 Java中 ,運 行 時 系 統 對 對 象 的 處 理 要 進 行 類型 相 容 性 檢 查 ,以 防 止不 安 全 的 轉 換 。
7.頭 文 件
C、 C++中 用 頭 文 件 來 聲 明 類 的 原 型 以 及 全 局 變 量 、 庫 函數等 ,在 大 的 系 統中 ,維 護 這 些 頭 文 件 是 很 困 難 的 。 而 Java不支 持 頭 文 件 ,類 成 員的 類 型 和 訪 問 權限 都 封 裝 在 一 個 類 中 ,運 行 時 系 統 對 訪 問 進 行 控 制 ,防 止 對 私有 成 員 的 操 作 。 同時 ,Java中 用 import語 句 來 與 其 它 類 進 行 通 訊 ,以 便 使 用它 們 的方法 。
8.結 構 和 聯 合
C、 C++中 的 結 構 和 聯 合 中 所 有 成 員 均 為 公 有 ,這 就 帶 來了安 全 性 問 題 。Java中 不 包 含 結 構 和 聯 合 ,所 有 的 內 容 都 封裝 在 類 中 。
9.預 處 理
C、 C++中 用 宏 定 義 來 實 現 的 代 碼 給 程 序 的 可 讀 性 帶 來 了困難 。 在 Java中 ,不 支 持 宏 ,它 通 過 關 鍵 字 final 來 聲 明 一 個 常量 ,以 實 現 宏 定 義中 廣 泛 使 用 的 常 量定 義 。