JAVA語 言 的 特 點
Java到 底 是 一 種 什 麽 樣 的 語 言 呢? Java是 一 種 簡 單 的 面 象 對 象 的 分 布 式 的 解 釋 的 健 壯 的 安 全 的 結 構 中 立 的 可 移 植 的 性 能 很 優 異 的 多 線 程 的 動 態 的 語 言。
[1] 簡 單
Java最 初 是 為 對 家 用 電 器 進 行 集 成 控 制 而 設 計 的 一 種 語 言, 因 此 它 必 須 簡 單 明 了。Java語 言 的 簡 單 性 主 要 體 現 在 以 下 三 個 方 面: 1. Java的 風 格 類 似 於C++, 因 而C++程 序 員 是 非 常 熟 悉 的。 從 某 種 意 義 上 講,Java語 言 是C及C++語 言 的 一 個 變 種, 因 此,C++程 序 員 可 以 很 快 就 掌 握Java編 程 技 術。 2. Java摒 棄 了C++中 容 易 引 發 程 序 錯 誤 的 地 方, 如 指 針 和 內 存 管 理。 3. Java提 供 了 豐 富 的 類 庫。
[2] 面 向 對 象
面 向 對 象 可 以 說 是Java最 重 要 的 特 性。Java語 言 的 設 計 完 全 是 面 向 對 象 的, 它 不 支 持 類 似C語 言 那 樣 的 面 向 過 程 的 程 序 設 計 技 術。Java支 持 靜 態 和 動 態 風 格 的 代 碼 繼 承 及 重 用。 單 從 面 向 對 象 的 特 性 來 看,Java類 似 於SmallTalk, 但 其 它 特 性、 尤 其 是 適 用 於 分 布 式 計 算 環 境 的 特 性 遠 遠 超 越 了SmallTalk。
[3] 分 布 式
Java包 括 一 個 支 持HTTP和FTP等 基 於TCP/IP協 議 的 子 庫。 因 此,Java應 用 程 序 可 憑 借URL打 開 並 訪 問 網 絡 上 的 對 象, 其 訪 問 方 式 與 訪 問 本 地 文 件 系 統 幾 乎 完 全 相 同。 為 分 布 環 境 尤 其 是Internet提?copy;動 態 內 容 無 疑 是 一 項 非 常 宏 偉 的 任 務, 但Java的 語 法 特 性 卻 使 我 們 很 容 易 地 實 現 這 項 目 標。
[4] 健 壯
Java致 力 於 檢 查 程 序 在 編 譯 和 運 行 時 的 錯 誤。 類 型 檢 查 幫 助 檢 查 出 許 多 開 發 早 期 出 現 的 錯 誤。Java自 已 操 縱 內 存 減 少 了 內 存 出 錯 的 可 能 性。Java還 實 現 了 真 數 組, 避 免 了 覆 蓋 數 據 的 可 能。 這 項 功 能 特 征 大 大 縮 短 了 開 發Java應 用 程 序 的 周 期。 Java提 供Null指 針 檢 測 數 組 邊 界 檢 測 異 常 出 口 字 節 代 碼 校 驗
[5] 結 構 中 立
另 外, 為 了 建 立Java作 為 網 絡 的 一 個 整 體,Java將 它 的 程 序 編 譯 成 一 種 結 構 中 立 的 中 間 文 件 格 式。 只 要 有 Java運 行 系 統 的 機 器 都 能 執 行 這 種 中 間 代 碼。 現 在,Java運 行 系 統 有Solaris2.4(SPARC),Win32系 統(Windows95和Windows NT)等. Java源 程 序 被 編 譯 成 一 種 高 層 次 的 與 機 器 無 關 的byte-code格 式 語 言, 這 種 語 言 被 設 計 在 虛 擬 機 上 運 行, 由 機 器 相 關 的 運 行 調 試 器 實 現 執 行。
[6] 安 全
Java的 安 全 性 可 從 兩 個 方 面 得 到 保 證。 一 方 面, 在Java語 言 裏, 象 指 針 和 釋 放 內 存 等C++功 能 被 刪 除, 避 免 了 非 法 內 存 操 作。 另 一 方 面, 當Java用 來 創 建 瀏 覽 器 時, 語 言 功 能 和 一些瀏 覽 器 本 身 提 供 的 功 能 結 合 起 來, 使 它 更 安 全。 Java語 言 在 你 的 機 器 上 執 行 前, 要 經 過 很 多 次 的 測 試。 它 經 過 代 碼 校 驗, 檢 查 代 碼 段 的 格 式, 檢 測 指 針 操 作, 對 象 操 作 是 否 過 分 以 及 試 圖 改 變 一 個 對 象 的 類 型。
[7] Byte-code校 驗
如 果byte-code通 過 代 碼 校 驗, 沒 有 返 回 錯 誤, 我 們 可 知 道: 代 碼 沒 有 堆 棧 上 溢 出 和 下 溢 出 所 有 操 作 代 碼 參 數 類 型 都 是 正 確 的 沒 有 發 生 非 法 數 據 轉 換, 如 將 整 數 轉 換 成 指 針。 訪 問 對 象 操 作 是 合 法 的
[8] 類 裝 載
Class Loader通 過 將 本 機 類 與 網 絡 資 源 類 的 名 稱 分 開, 來 保 持 安 全 性。 因 為 調 入 類 時 總 要 經 過 檢 查, 這 樣 避 免 了 特 洛 伊 木 馬 現 象 的 出 現。 從 網 絡 上 下 載 的 類 被 調 進 一 個 與 源 相 關 的 私 有 的 名 字 域。 當 一 個 私 有 類 訪 問 另 一 個 類 時,build-in(本 機 類)首 先 被 檢 查, 然 後 檢 查 相 關 的 類。 這 樣 就 避 免 了 破 壞 本 機 類 情 況 的 出 現。
[9] 可 移 植 的
同 體 系 結 構 無 關 的 特 性 使 得Java應 用 程 序 可 以 在 配 備 了Java解 釋 器 和 運 行 環 境 的 任 何 計 算 機 系 統 上 運 行, 這 成 為Java應 用 軟 件 便 於 移 植 的 良 好 基礎。 但 僅 僅 如 此 還 不 夠。 如 果 基 本 數 據 類 型 設 計 依 賴 於 具 體 實 現, 也 將 為 程 序 的 移 植 帶 來 很 大 不 便。 例 如 在Windows 3.1中 整 數(Integer)為16bits, 在Windows 95中 整 數 為32bits, 在DEC Alpha中 整 數 為64bits, 在Intel 486中 為32bits。 通 過 定 義 獨 立 於 平 臺 的 基 本 數 據 類 型 及 其 運 算,Java數 據 得 以 在 任 何 硬 件 平 臺 上 保 持 一 致。Java語 言 的 基 本 數 據 類 型 及 其 表 示 方 式 如 下: byte 8-bit 二 進 制 補 碼 short 16-bit 二 進 制 補 碼 int 32-bit 二 進 制 補 碼 long 64-bit 二 進 制 補 碼 float 32-bit IEEE 754浮點 數 double 32-bit IEEE 754浮點 數 char 16-bit Unicode字 符。
在 任 何Java解 釋 器 中, 數 據 類 型 都 是 依 據 以 上 標 準 具 體 實 現 的。 因 為 幾 乎 目 前 使 用 的 所 有CPU都 能 支 持 以 上 數 據 類 型、8~64位 整 數 格 式 的 補 碼 運 算 和 單/雙 精 度浮點 運 算。 Java編 譯 器 本 身 就 是 用Java語 言 編 寫 的。Java運 算 系 統 的 編 制 依 據POSIX方 便 移 植 的 限 制, 用ANSI C語 言 寫 成。Java語 言 規 範 中 也 沒 有 任 何\"同 具 體 實 現 相 關\"的 內 容。
[10] 解 釋 的
Java解 釋 器(運 行 系 統)能 直 接 運 行 目 標 代 碼 指 令。 鏈 接 程 序 通 常 比 編 譯 程 序 所 需 資 源 少, 所 以 程 序 員 可 以 在 創 建 源 程 序 上 花 上 更 多 的 時 間。
[11] 高 性 能
如 果 解 釋 器 速 度 不 慢,Java可 以 在 運 行 時 直 接 將 目 標 代 碼 翻 譯 成 機 器 指 令。Sun用 直 接 解 釋 器 一 秒 鐘 內 可 調 用300,000個 過 程。 翻 譯 目 標 代 碼 的 速 度 與C/C++的 性 能 沒 什 麽 區 別。
[12] 多 線 程
Java提?copy;的 多 線 程 功 能 使 得 在 一 個 程 序 裏 可 同 時 執 行 多 個 小 任 務。 線 程 - - 有 時 也 稱 小 進 程 - - 是 一 個 大 進 程 裏 分 出 來 的 小 的 獨 立 的 進 程。 因 為Java實 現 的 多 線 程 技 術, 所 以 比C和C++更 鍵 壯。 多 線 程 帶 來 的 更 大 的 好 處 是 更 好 的 交 互 性 能 和 實 時 控 制 性 能。 當 然 實 時 控 制 性 能 還 取 決 於 系 統 本 身(UNIX,Windows,Macintosh等), 在 開 發 難 易 程 度 和 性 能 上 都 比 單 線 程 要 好。 任 何 用 過 當 前 瀏 覽 器 的 人, 都 感 覺 為 調 一 副 圖 片 而 等 待 是 一 件 很 煩 惱 的 事 情。 在Java裏, 你 可 用 一 個 單 線 程 來 調 一 副 圖 片, 而 你 可 以 訪 問HTML裏 的 其 它 信 息 而 不 必 等 它。
[13] 動 態
Java的 動 態 特 性 是 其 面 向 對 象 設 計 方 法 的 發 展。 它 允 許 程 序 動 態 地 裝 入 運 行 過 程 中 所 需 要 的 類, 這 是C++語 言 進 行 面 向 對 象 程 序 設 計 所 無 法 實 現 的。 在C++程 序 設 計 過 程 中, 每 當 在 類 中 增 加 一 個 實 例 變 量 或 一 種 成 員 函 數 後, 引 用 該 類 的 所 有 子 類 都 必 須 重 新 編 譯, 否 則 將 導 致 程 序 崩 潰。Java從 如 下 幾 方 面 采 取 措施來 解 決 這 個 問 題。Java編 譯 器 不 是 將 對 實 例 變 量 和 成 員 函 數 的 引 用 編 譯 為 數 值 引 用, 而 是 將 符 號 引 用 信 息 在 字 節 碼 中 保 存 下 傳 遞 給 解 釋 器, 再 由 解 釋 器 在 完 成 動 態 連 接 類 後, 將 符 號 引 用 信 息 轉 換 為 數 值 偏 移 量。 這 樣, 一 個 在 存 儲 器 生 成 的 對 象 不 在 編 譯 過 程 中 決 定, 而 是 延 遲 到 運 行 時 由 解 釋 器 確 定 的。 這 樣, 對 類 中 的 變 量 和 方 法 進 行 更 新 時 就 不 至 於 影 響 現 存 的 代 碼。 解 釋 執 行 字 節 碼 時, 這 種 符 號 信 息 的 查 找 和 轉 換 過 程 僅 在 一 個 新 的 名 字 出 現 時 才 進 行 一 次, 隨 後 代 碼 便 可 以 全 速 執 行。 在 運 行 時 確 定 引 用 的 好 處 是 可 以 使 用 已 被 更 新 的 類, 而 不 必 擔 心 會 影 響 原 有 的 代 碼。 如 果 程 序 連 接 了 網 絡 中 另 一 系 統 中 的 某 一 類, 該 類 的 所 有 者 也 可 以 自 由 地 對 該 類 進 行 更 新, 而 不 會 使 任 何 引 用 該 類 的 程 序 崩 潰。 Java還 簡 化 了 使 用 一 個 升 級 的 或 全 新 的 協 議 的 方 法。 如 果 你 的 系 統 運 行Java程 序 時 遇 到 了 不 知 怎 樣 處 理 的 程 序, 沒 關 系,Java能 自 動 下 載 你 所 需 要 的 功 能 程 序。
JAVA語 言 的 特 點