?? java.txt
字號:
第 一 章 Java語 言 的 產 生 及 其 特 點
1.1 Java產 生 的 歷 史 與 現 狀
1.1.1 Java產 生 的 歷 史
Java來 自 于Sun公 司 的 一 個 叫Green的 項 目, 其 原 先 的 目 的 是 為 家 用 消 費 電 子 產 品 開 發 一 個 分 布 式 代 碼 系 統, 這 樣 我 們 可 以 把E-mail發 給 電 冰 箱、 電 視 機 等 家 用 電 器, 對 它 們 進 行 控 制, 和 它 們 進 行 信 息 交 流。 開 始, 準 備 采 用C++,但C++太 復 雜, 安 全 性 差, 最 后 基 于C++開 發 一 種 新 的 語 言Oak(Java的 前 身),Oak是 一 種 用 于 網 絡 的 精 巧 而 安 全 的 語 言,Sun公 司 曾 依 此 投 標 一 個 交 互 式 電 視 項 目, 但 結 果 是 被SGI打 敗。 可 憐 的Oak幾 乎 無 家 可 歸, 恰 巧 這 時Mark Ardreesen開 發 的Mosaic和Netscape啟 發 了Oak項 目 組 成 員, 他 們 用Java編 制 了HotJava瀏 覽 器, 得 到 了Sun公 司 首 席 執 行 官Scott McNealy的 支 持, 觸 發 了Java進 軍Internet。 Java的 取 名 也 有 一 個 趣 聞, 有 一 天, 幾 位Java成 員 組 的 會 員 正 在 討 論 給 這 個 新 的 語 言 取 什 么 名 字, 當 時 他 們 正 在 咖 啡 館 喝 著 Java(爪 哇) 咖 啡, 有 一 個 人 靈 機 一 動 說 就 叫Java怎 樣, 得 到 了 其 他 人 的 贊 賞, 于 是,Java這 個 名 字 就 這 樣 傳 開 了。
1.1.2 Java的 現 狀
Java是Sun公 司 推 出 的 新 的 一 代 面 向 對 象 程 序 設 計 語 言, 特 別 適 合 于Internet應 用 程 序 開 發, 它 的 平 臺 無 關 性 直 接 威 脅 到Wintel的 壟 斷 地 位。 一 時 間,\' 連Internet, 用Java編 程\', 成 為 技 術 人 員 的 一 種 時 尚。 雖 然 新 聞 界 的 報 導 有 些 言 過 其 實, 但Java作 為 軟 件 開 發 的 一 種 革 命 性 的 技 術, 其 地 位 已 被 確 立, 這 表 現 在 以 下 幾 個 方 面: 1.計 算 機 產 業 的 許 多 大 公 司 購 買 了 Java的 許 可 證, 包 括IBM,Apple,DEC,Adobe,Silicon Graphics,HP,Oracel,Toshiba, 以 及 最 不 情 愿 的Microsoft。 這 一 點 說 明,Java已 得 到 了 工 業 界 的 認 可。 2.眾 多 的 軟 件 開 發 商 開 始 支 持Java的 軟 件 產 品。 例 如:Borland公 司 正 在 開 發 的 基 于Java的 快 速 應 用 程 序 開 發 環 境Latte, 預 計 產 品 會 在1996年 中 期 發 布。Borland公 司 的 這 一 舉 措, 推 動 了Java進 入PC機 軟 件 市場。Sun公 司 自 己 的Java開 發 環 境Java Workshop已 經 發 布。 數 據 庫 廠 商 如:Illustra,Sysbase,Versant,Oracle都 在 開 發CGI接 口, 支 持HTML和Java。 今 天 是 以 網 絡 為 中 心 的 計 算 時 代, 不 支 持HTML和Java, 應 用 程 序 的 應 用 范 圍 只 能 限 于 同 質 的 環 境(相 同 的 硬 件 平 臺)。 3.Intranet正 在 成 為 企 業 信 息 系 統 最 佳 的 解 決 方 案, 而 其 中Java將 發 揮 不 可 替 代 的 作 用。Intranet的 目 的 是 把Internet用 于 企 業 內 部 的 信 息 系 統, 它 的 優 點 表 現 在: 便 宜, 易 于 使 用 和 管 理。 用 戶 不 管 使 用 何 種 類 型 的 機 器 和 操 作 系 統, 界 面 是 統 一 的Intrnet瀏 覽 器, 而 數 據 庫、Web頁 面、 應 用 程 序(用Java編 的Applet)則 存 在WWW服 務 器 上, 無 論 是 開 發 人 員, 還 是 管 理 人 員, 抑 或 是 用 戶 都 可 以 受 益 于 該 解 決 方 案。 Java語 言 正 在 不 斷 發 展 和 完 善,Sun公 司 是 主 要 的 發 展 推 動 者, 較 通 用 的 編 譯 環 境 有JDK(Java Develop Kit)與JWS(Java Workshop)。 還 有 很 多 其 他 公 司 正 在 開 發Java語 言 的 編 譯 器 與 集 成 環 境, 預 計 不 久Java語 言 的 正 確 性 與 效 率 都 將 會 提 高, 用 戶 用Java編 程 和 現 在 用C++編 程 一 樣 方 便。
1.2 Java語 言 的 特 點
Java到 底 是 一 種 什 么 樣 的 語 言 呢? Java是 一 種 簡 單 的 面 象 對 象 的 分 布 式 的 解 釋 的 健 壯 的 安 全 的 結 構 中 立 的 可 移 植 的 性 能 很 優 異 的 多 線 程 的 動 態 的 語 言。
1.2.1 簡 單
Java最 初 是 為 對 家 用 電 器 進 行 集 成 控 制 而 設 計 的 一 種 語 言, 因 此 它 必 須 簡 單 明 了。Java語 言 的 簡 單 性 主 要 體 現 在 以 下 三 個 方 面: 1. Java的 風 格 類 似 于C++, 因 而C++程 序 員 是 非 常 熟 悉 的。 從 某 種 意 義 上 講,Java語 言 是C及C++語 言 的 一 個 變 種, 因 此,C++程 序 員 可 以 很 快 就 掌 握Java編 程 技 術。 2. Java摒 棄 了C++中 容 易 引 發 程 序 錯 誤 的 地 方, 如 指 針 和 內 存 管 理。 3. Java提 供 了 豐 富 的 類 庫。
1.2.2 面 向 對 象
面 向 對 象 可 以 說 是Java最 重 要 的 特 性。Java語 言 的 設 計 完 全 是 面 向 對 象 的, 它 不 支 持 類 似C語 言 那 樣 的 面 向 過 程 的 程 序 設 計 技 術。Java支 持 靜 態 和 動 態 風 格 的 代 碼 繼 承 及 重 用。 單 從 面 向 對 象 的 特 性 來 看,Java類 似 于SmallTalk, 但 其 它 特 性、 尤 其 是 適 用 于 分 布 式 計 算 環 境 的 特 性 遠 遠 超 越 了SmallTalk。
1.2.3 分 布 式
Java包 括 一 個 支 持HTTP和FTP等 基 于TCP/IP協 議 的 子 庫。 因 此,Java應 用 程 序 可 憑 借URL打 開 并 訪 問 網 絡 上 的 對 象, 其 訪 問 方 式 與 訪 問 本 地 文 件 系 統 幾 乎 完 全 相 同。 為 分 布 環 境 尤 其 是Internet提?copy;動 態 內 容 無 疑 是 一 項 非 常 宏 偉 的 任 務, 但Java的 語 法 特 性 卻 使 我 們 很 容 易 地 實 現 這 項 目 標。
1.2.4 健 壯
Java致 力 于 檢 查 程 序 在 編 譯 和 運 行 時 的 錯 誤。 類 型 檢 查 幫 助 檢 查 出 許 多 開 發 早 期 出 現 的 錯 誤。Java自 已 操 縱 內 存 減 少 了 內 存 出 錯 的 可 能 性。Java還 實 現 了 真 數 組, 避 免 了 覆 蓋 數 據 的 可 能。 這 項 功 能 特 征 大 大 縮 短 了 開 發Java應 用 程 序 的 周 期。 Java提 供Null指 針 檢 測 數 組 邊 界 檢 測 異 常 出 口 字 節 代 碼 校 驗
1.2.5 結 構 中 立
另 外, 為 了 建 立Java作 為 網 絡 的 一 個 整 體,Java將 它 的 程 序 編 譯 成 一 種 結 構 中 立 的 中 間 文 件 格 式。 只 要 有 Java運 行 系 統 的 機 器 都 能 執 行 這 種 中 間 代 碼。 現 在,Java運 行 系 統 有Solaris2.4(SPARC),Win32系 統(Windows95和Windows NT)等. Java源 程 序 被 編 譯 成 一 種 高 層 次 的 與 機 器 無 關 的byte-code格 式 語 言, 這 種 語 言 被 設 計 在 虛 擬 機 上 運 行, 由 機 器 相 關 的 運 行 調 試 器 實 現 執 行。
1.2.6 安 全
Java的 安 全 性 可 從 兩 個 方 面 得 到 保 證。 一 方 面, 在Java語 言 里, 象 指 針 和 釋 放 內 存 等C++功 能 被 刪 除, 避 免 了 非 法 內 存 操 作。 另 一 方 面, 當Java用 來 創 建 瀏 覽 器 時, 語 言 功 能 和 一些瀏 覽 器 本 身 提 供 的 功 能 結 合 起 來, 使 它 更 安 全。 Java語 言 在 你 的 機 器 上 執 行 前, 要 經 過 很 多 次 的 測 試。 它 經 過 代 碼 校 驗, 檢 查 代 碼 段 的 格 式, 檢 測 指 針 操 作, 對 象 操 作 是 否 過 分 以 及 試 圖 改 變 一 個 對 象 的 類 型。
1.2.6.1 Byte-code校 驗
如 果byte-code通 過 代 碼 校 驗, 沒 有 返 回 錯 誤, 我 們 可 知 道: 代 碼 沒 有 堆 棧 上 溢 出 和 下 溢 出 所 有 操 作 代 碼 參 數 類 型 都 是 正 確 的 沒 有 發 生 非 法 數 據 轉 換, 如 將 整 數 轉 換 成 指 針。 訪 問 對 象 操 作 是 合 法 的
1.2.6.2 類 裝 載
Class Loader通 過 將 本 機 類 與 網 絡 資 源 類 的 名 稱 分 開, 來 保 持 安 全 性。 因 為 調 入 類 時 總 要 經 過 檢 查, 這 樣 避 免 了 特 洛 伊 木 馬 現 象 的 出 現。 從 網 絡 上 下 載 的 類 被 調 進 一 個 與 源 相 關 的 私 有 的 名 字 域。 當 一 個 私 有 類 訪 問 另 一 個 類 時,build-in(本 機 類)首 先 被 檢 查, 然 后 檢 查 相 關 的 類。 這 樣 就 避 免 了 破 壞 本 機 類 情 況 的 出 現。
1.2.7 可 移 植 的
同 體 系 結 構 無 關 的 特 性 使 得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語 言 規 范 中 也 沒 有 任 何\'同 具 體 實 現 相 關\'的 內 容。
1.2.8 解 釋 的
Java解 釋 器(運 行 系 統)能 直 接 運 行 目 標 代 碼 指 令。 鏈 接 程 序 通 常 比 編 譯 程 序 所 需 資 源 少, 所 以 程 序 員 可 以 在 創 建 源 程 序 上 花 上 更 多 的 時 間。
1.2.9 高 性 能
如 果 解 釋 器 速 度 不 慢,Java可 以 在 運 行 時 直 接 將 目 標 代 碼 翻 譯 成 機 器 指 令。Sun用 直 接 解 釋 器 一 秒 鐘 內 可 調 用300,000個 過 程。 翻 譯 目 標 代 碼 的 速 度 與C/C++的 性 能 沒 什 么 區 別。
1.2.10 多 線 程
Java提?copy;的 多 線 程 功 能 使 得 在 一 個 程 序 里 可 同 時 執 行 多 個 小 任 務。 線 程 - - 有 時 也 稱 小 進 程 - - 是 一 個 大 進 程 里 分 出 來 的 小 的 獨 立 的 進 程。 因 為Java實 現 的 多 線 程 技 術, 所 以 比C和C++更 鍵 壯。 多 線 程 帶 來 的 更 大 的 好 處 是 更 好 的 交 互 性 能 和 實 時 控 制 性 能。 當 然 實 時 控 制 性 能 還 取 決 于 系 統 本 身(UNIX,Windows,Macintosh等), 在 開 發 難 易 程 度 和 性 能 上 都 比 單 線 程 要 好。 任 何 用 過 當 前 瀏 覽 器 的 人, 都 感 覺 為 調 一 副 圖 片 而 等 待 是 一 件 很 煩 惱 的 事 情。 在Java里, 你 可 用 一 個 單 線 程 來 調 一 副 圖 片, 而 你 可 以 訪 問HTML里 的 其 它 信 息 而 不 必 等 它。
1.2.11 動 態
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -