1、面 向 对 象 的 J a va 语 言 程 序 设 计孟 祥 武 张 玉 洁 编 著北 京 邮 电 大 学 出 版 社 北 京 内 容 提 要本书 介 绍 了 Java 语 言 的 基 本 语 法 和 程 序 设 计 方 法 , 全 书 共 12 章 , 分 别 介 绍 了 Java 语 言 的 背 景 、 数 据 类 型、 运 算 符 、 控 制 流 、 数 组 、 面 向 对 象 程 序 设 计 、 异 常 处 理 、 线 程 、 Java A pplet、 图 形 用 户 界 面 、 输 入 / 输 出 处 理 和 网 络 通 信 。本 书 可 作 为 高 等 学 校 理 工 科 学
2、生 教 材 或 教 学 参 考 书 , 也 可 作 为 工 程 技 术 人 员 的 培 训 教 材 或 自 学 参考 书 。图 书 在 版 编 目 ( CIP ) 数 据面 向 对 象 的 Java 语 言程 序 设 计 / 孟 祥 武 , 张 玉 洁 编 著 . 北 京 : 北 京 邮 电 大 学 出 版 社 , 2001 .2 ISBN 7-5635-0496-6 .面 . . . . 孟 . . . 张 . . . .J AV A 语 言 - 程 序 设 计 .T P312中 国 版 本 图 书 馆 CIP 数 据 核 字 (2001 ) 第 07363 号书 名 : 面 向 对 象 的
3、 Java 语 言 程 序 设 计责 任 编 辑 : 蒋 亮出 版 者 : 北 京 邮 电 大 学 出 版 社 ( 北 京 市 海 淀 区 西 土 城 路 10 号 )邮 编 : 100876 电 话 : 62282185 62283578经 销 :网 址 : w ww .bupt pres s .com各 地 新 华 书 店印 开刷 :本 :北 京 源 海 胶 印 厂787 mm1 092 mm 1/ 16 印 张 : 9 字 数 : 230 千 字版 书 定次 :号 :价 :2001 年 3 月 第 1 版 2001 年 3 月 第 1 次 印 刷ISBN 7-5635-0496-6 /
4、TP4716 .00 元前 言 计 算 机 的 主 要 用 途 将 从 单 机 应 用 转 向 网 络 应 用 , 这 是 一 大 趋 势 , 不 可 逆 转 。 网 络 就 是 计 算 机 , Java 是 网 络 上 的 世 界 语 。 它 已 成 为 Inte rnet 网 络 编 程 语 言 事 实 上 的 标 准 。 它 是一 种 跨 平 台 的 、 适 合 于 网 络 计 算 环 境 的 面 向 对 象 程 序 设 计 语 言 。 Java 语 言 的 基 础 是 C + 语 言 , 但 去 除 了 其 中 易 出 错 部 分 。对 于 Java 语 言 程 序 , 首 先 由 J
5、a va 语 言 编 译 器 将 源 程 序 编 译 为 字 节 码 , 字 节 码 是 一 种中 间 码 , 这 种 中 间 码 由 Ja va 虚 拟 机 解 释 和 执 行 。Jav a 语 言 具 有 简 单 性 、 面 向 对 象 、 分 布 性 、 编 译 和 解 释 性 、 鲁 棒 性 、 安 全 性 、 中 性 的 体 系 结 构 、 可 移 植 性 、 高 性 能 、 多 线 程 和 动 态 性 等 特 点 。Jav a 语 言 源 于 失 败 的 消 费 电 子 类 技 术 , 然 后 在 一 个 流 产 的 系 统 中 为 计 算 机 提 供 交 互视 频 信 号 , 最
6、 终 在 1994 年 再 次 革 新 , 并 于 1995 年 5 月 推 出 。Jav a 语 言 自 从 1995 年 问 世 以 来 , 很 快 就 流 行 于 全 世 界 , 并 获 得 了 极 大 地 成 功 , 甚 至 改 变 了 计 算 模 式 , 在 世 界 范 围 内 , 引 起 了 一 股 Java 热 。Jav a 语 言 是 一 种 面 向 对 象 的 程 序 设 计 语 言 , 特 别 适 合 于 In tern et/ In t ra net 上 的 应 用 软 件 开 发 。目 前 , 越 来 越 多 的 软 件 开 发 项 目 选 择 Ja va 语 言 作
7、为 编 程 语 言 , 特 别 是 有 关 计 算 机 网络 方 面 的 软 件 , 所 以 越 来 越 多 的 人 开 始 学 习 并 使 用 Ja va 语 言 , 因 此 我 们 编 写 了 这 本 教 材 。本 书 共 12 章 , 第 1 章 简 要 介 绍 了 Java 语 言 产 生 的 背 景 、 发 展 与 现 状 、 特 点 、 开 发 环 境 。 第 2 章 讲 述 了 数 据 类 型 、 标 识 符 、 关 键 字 、 注 释 语 句 等 。 第 3 章 讲 述 了 运 算 符 和 优 先 级 。 第 4 章 讲 述 了 控 制 流 , 主 要 是 分 支 语 句 和
8、循 环 语 句 。 第 5 章 讲 述 了 数 组 , 包 括 一 维 数 组 和 多 维 数 组 。 第 6 章 首 先 讲 述 了 面 向 对 象 程 序 设 计 的 主 要 概 念 、 然 后 具 体 讲 述 了 Java 的 类 、 继 承 、 对 象 、 接 口 、 包 、 修 饰 符 。 第 7 章 讲 述 了 异 常 和 异 常 处 理 过 程 。 第 8 章 讲 述 了 线 程 , 包 括 线 程 的 创 建 、 状 态 、 调 度 、 同 步 。 第 9 章 首 先 讲 述 了 Java Applet 和 Java Appli- cation 的 区 别 , 然 后 讲 述
9、了 Java A pplet 和 多 媒 体 。 第 10 章 讲 述 了 图 形 用 户 界 面 , 主 要 是A W T 的 事 件 处 理 机 制 和 A WT 的 组 成 。 第 11 章 讲 述 了 输 入 / 输 出 处 理 , 包 括 流 、 Inpu t- St ream 和 Ou t putSt ream 类 、 文 件 I/ O 处 理 。 第 12 章 讲 述 了 网 络 通 信 , 主 要 是 U RL、 Socket 通 信 和 数 据 报 通 信 , 并 给 出 了 一 些 实 例 。本 书 的 作 者 从 1996 年 起 一 直 从 事 有 关 Ja va 的
10、科 研 、 开 发 、 教 学 、 培 训 等 工 作 。 本 书 是 作 者 在 从 事 有 关 Java 语 言 科 研 和 教 学 的 基 础 上 编 写 出 来 的 , 本 书 作 为 一 本 初学 者 的 入 门 教 材 , 通 俗 易 懂 、 简 明 扼 要 。 希 望 本 书 的 编 写 能 对 广 大 初 学 者 有 所 帮 助 。 因 作 者 水 平 有 限 , 书 中 如 有 不 妥 之 处 , 敬 请 广 大 读 者 批 评 指 正 。 感 谢 丁 宇 新 博 士 、 冀 振 燕 博 士 为 我 们 收 集 、 提 供 了 部 分 资 料 。 感 谢 中 国 科 学 院
11、软 件 研究 所 博 士 生 导 师 程 虎 研 究 员 的 支 持 与 关 心 。 最 后 衷 心 感 谢 北 京 邮 电 大 学 白 中 英 教 授 的 关 心 。孟 祥 武 张 玉 洁 北 京 邮 电 大 学 计 算 机 科 学 与 技 术 学 院2000 年 12 月目 录 第 一 章 J ava 语 言 的 背 景 11 .1 Java 语 言 的 发 展 与 现 状 11 .2 Java 语 言 的 特 点 21 .3 Java 语 言 开 发 环 境 41 .4 Java 语 言 程 序 实 例 5第 二 章 数 据 类 型 92 .1 标 识 符 92 .2 Java 语 言
12、关 键 字 102 .3 注 释 语 句 112 .4 数 据 类 型 112 .5 各 类 数 值 型 数 据 间 的 混 合 运 算 15第 三 章 运 算 符 173 .1 运 算 符 和 优 先 级 173 .2 算 术 运 算 符 183 .3 关 系 运 算 符 203 .4 布 尔 逻 辑 运 算 符 213 .5 位 运 算 符 223 .6 赋 值 运 算 符 223 .7 条 件 运 算 符 233 .8 其 它 23第 四 章 控 制 流 244 .1 分 支 语 句 244 .2 循 环 语 句 33第 五 章 数 组 405 .1 一 维 数 组 405 .2 多 维
13、 数 组 46 面 向 对 象 的 Java 语 言 程 序 设 计第 六 章 面 向 对 象 程 序 设 计 516 .1 面 向 对 象 程 序 设 计 的 发 展 516 .2 面 向 对 象 方 法 的 主 要 概 念 526 .3 Java 的 类 556 .4 Java 的 继 承 606 .5 Java 的 对 象 626 .6 接 口 666 .7 包 676 .8 修 饰 符 68第 七 章 异 常 处 理 707 .1 异 常 707 .2 异 常 处 理 747 .3 异 常 处 理 实 例 76第 八 章 线 程 838 .1 线 程 的 概 念 838 .2 线 程
14、的 创 建 868 .3 线 程 的 状 态 878 .4 线 程 的 调 度 888 .5 线 程 的 同 步 898 .6 线 程 的 实 例 91第 九 章 J ava Applet 949 .1 Java A pplet 和 Ja va A pplication 949 .2 Java A pplet 的 生 命 周 期 959 .3 Java A pplet 与 多 媒 体 96第 十 章 图 形 用 户 界 面 10510 .1 A W T 的 事 件 处 理 机 制 10510 .2 A W T 的 组 成 108第 十 一 章 输 入 / 输 出 处 理 11511 .1 流
15、11511 .2 Inpu tSt r ea m 与 Ou t putSt ream 类 11611 .3 文 件 I/ O 处 理 120 目 录第 十 二 章 网 络 通 信 12312 .1 U RL 12312 .2 Socket 通 信 12712 .3 数 据 报 通 信 132 8 第 一 章 J a va 语 言 的 背 景本 章 主 要 讲 述 Java 语 言 的 发 展 与 现 状 、 Ja va 语 言 的 特 点 及 开 发 环 境 , 并 结 合 一 些 简 单 的 实 例 使 读 者 对 Java 语 言 有 个 初 步 的 认 识 。1 .1 J ava 语 言
16、 的 发 展 与 现 状计 算 机 的 主 要 用 途 将 从 单 机 应 用 转 向 网 络 应 用 , 这 是 一 大 趋 势 , 不 可 逆 转 。 网 络 就 是 计 算 机 , Java 是 网 络 上 的 世 界 语 。 它 已 成 为 Inte rnet 网 络 编 程 语 言 事 实 上 的 标 准 。 它 是一 种 跨 平 台 的 、 适 合 于 网 络 计 算 环 境 的 、 面 向 对 象 的 程 序 设 计 语 言 。最 初 , S un 希 望 进 入 消 费 类 电 子 产 品 市 场 。 对 于 消 费 类 电 子 产 品 , 从 商 业 上 考 虑 , 要 求
17、C PU 要 轻 便 小 巧 , 软 件 可 靠 , 价 格 合 理 等 , 最 重 要 的 是 能 够 标 准 化 。 这 就 要 求 编 程 语 言 简 明 、 可 靠 。 S un 专 门 成 立 了 一 个 小 组 开 始 寻 找 满 足 条 件 的 编 程 语 言 , 小 组 负 责 人 是 Ja mes Gos ling。 他 们 认 为 : 目 前 已 存 在 的 程 序 设 计 语 言 , 没 有 能 满 足 要 求 的 。 所 以 要 设计 一 种 新 的 程 序 设 计 语 言 。考 虑 到 C+ + 语 言 是 当 前 广 泛 使 用 的 语 言 , 因 此 , 他 们
18、以 C+ + 语 言 为 基 础 , 设 计 出 了一 种 新 的 程 序 设 计 语 言 Java。Jav a 语 言 的 基 础 是 C+ + 语 言 , 但 去 除 了 其 中 易 出 错 的 部 分 。Jav a 是 Sun 公 司 为 家 电 编 程 而 设 计 的 一 种 语 言 , 简 单 紧 凑 , 而 且 适 应 不 同 的 CP U。 在 Java 语 言 开 发 完 成 之 时 , 正 赶 上 Inte rnet 大 潮 , Java 语 言 建 立 的 “ 虚 拟 运 行 环 境” 解 决 了 跨 平 台 问 题 。 Jav a 语 言 于 1995 年 5 月 推 出
19、 , 获 得 了 极 大 的 成 功 , 甚 至 改 变 了 计 算 模 式 , 在 世 界 范 围 内 , 引 起 了 一 股 Ja va 热 。最 近 几 年 , 在 In tern et 上 出 现 的 特 别 吸 引 人 的 事 件 , 就 是 Java 语 言 和 用 Java 语 言 编写 的 浏 览 器 H ot Java。对 于 Java 语 言 程 序 , 首 先 由 Ja va 语 言 编 译 器 将 源 程 序 编 译 为 字 节 码 , 字 节 码 是 一 种中 间 码 , 这 种 中 间 码 由 Ja va 虚 拟 机 解 释 和 执 行 。Jav a 语 言 的 诞
20、 生 必 将 对 整 个 计 算 机 产 业 产 生 深 远 的 影 响 , 对 传 统 的 计 算 模 型 提 出 了新 的 挑 战 。有 人 预 言 : Java 语 言 将 是 网 络 上 的 “ 世 界 语” , 今 后 所 有 用 其 它 语 言 编 写 的 软 件 统 统 都 要 用 Java 语 言 来 改 写 。Jav a 语 言 的 出 现 , 将 会 引 起 一 场 软 件 革 命 , 这 是 因 为 传 统 的 软 件 往 往 都 是 与 具 体 的 实 现 环 境 有 关 , 换 了 一 个 环 境 就 需 要 做 一 番 改 动 , 耗 时 费 力 ; 而 用 Jav
21、a 语 言 编 写 的 程 序 能运 行 在 不 同 的 机 器 上 , 只 要 所 用 的 机 器 能 提 供 Ja va 语 言 解 释 器 即 可 。Jav a 语 言 将 对 未 来 软 件 的 开 发 产 生 很 大 的 影 响 , 这 可 从 以 下 几 个 方 面 考 虑 :(1 ) 软 件 的 需 求 分 析 。 可 以 将 用 户 的 需 求 进 行 动 态 地 可 视 化 描 述 , 以 提 供 设 计 者 更面 向 对 象 的 Java 语 言 程 序 设 计 2 加 直 观 的 要 求 。 用 户 的 需 求 是 各 色 各 样 的 , 受 地 区 、 行 业 、 部
22、门 、 爱 好 的 影 响 。 用 Java 语 言 都 可 以 描 述 清 楚 。(2 ) 软 件 的 开 发 方 法 。 由 于 Ja va 语 言 的 面 向 对 象 的 特 性 , 所 以 完 全 可 以 用 面 向 对 象的 技 术 与 方 法 来 开 发 , 这 是 符 合 最 新 的 软 件 开 发 规 范 要 求 的 。(3 ) Java 语 言 的 动 画 效 果 远 比 GU I 技 术 更 加 逼 真 , 尤 其 是 利 用 WW W 提 供 的 巨 大动 画 资 源 空 间 , 可 以 共 享 全 世 界 动 态 画 面 的 资 源 。(4 ) 软 件 最 终 产 品
23、。 用 Ja va 语 言 开 发 的 软 件 可 以 具 有 可 视 化 、 可 听 化 、 可 操 作 化 和 可 交 互 性 。 对 于 动 画 与 动 作 , 要 它 停 就 停 , 要 它 继 续 就 继 续 , 而 这 是 在 电 影 与 电 视 播 放 过程 中 难 以 做 到 的 。(5 ) 其 它 。 使 用 Ja va 语 言 对 开 发 效 益 和 开 发 价 值 都 有 比 较 明 显 的 影 响 。Jav a 语 言 程 序 和 支 持 它 的 浏 览 器 ( 如 H ot Java , Net scap e 的 Na viga tor3 .0 以 上 版 本 , M
24、icrosoft In tern et E xplore r3 .0 以 上 版 本 ) 的 出 现 正 是 为 了 给 W eb 浏 览 提 供 动 画 ( A ni- m ation) 、 速 度 ( Speed) 、 交 互 性 ( In ter activit y) 。 Ja va 语 言 能 从 你 的 浏 览 器 里 直 接 播 放 声 音 , 播 放 页 面 里 的 动 画 , 还 能 告 诉 你 的 浏 览 器 怎 样 处 理 新 的 类 型 文 件 。Jav a 语 言 有 着 广 泛 的 应 用 前 景 , 大 体 上 可 以 从 以 下 几 个 方 面 来 考 虑 其 应
25、 用 : (1 ) 所 有 面 向 对 象 的 应 用 开 发 , 包 括 面 向 对 象 的 事 件 描 述 、 处 理 、 综 合 等 ;(2 ) 计 算 过 程 的 可 视 化 、 可 操 作 化 的 软 件 的 开 发 ; (3 ) 动 态 画 面 的 设 计 , 包 括 图 形 、 图 像 的 调 用 ;(4 ) 交 互 操 作 的 设 计 ( 选 择 交 互 、 定 向 交 互 、 控 制 流 程 等 ) ;(5 ) In ter net 的 系 统 管 理 功 能 模 块 的 设 计 , 包 括 We b 页 面 的 动 态 设 计 、 管 理 和 交 互 操 作 设 计 等 ;
26、(6 ) Int ra net ( 企 业 内 部 网 ) 上 的 软 件 开 发 ( 直 接 面 向 企 业 内 部 用 户 的 软 件 ) ; (7 ) 与 各 类 数 据 库 连 接 查 询 的 SQ L 语 句 实 现 ;(8 ) 其 它 应 用 类 型 的 程 序 。1 .2 J ava 语 言 的 特 点Jav a 语 言 具 有 简 单 性 、 面 向 对 象 、 分 布 性 、 编 译 和 解 释 性 、 健 壮 性 、 安 全 性 、 中 性 的 体 系 结 构 、 可 移 植 性 、 高 性 能 、 多 线 程 和 动 态 性 等 特 点 。 它 可 在 消 费 类 电 子
27、 产 品 、 个 人 计 算 机 、 网 络 计 算 机 、 工 作 站 和 主 机 上 使 用 。Jav a 语 言 不 仅 能 创 建 安 全 的 能 在 网 络 上 使 用 的 应 用 程 序 , 而 且 还 改 变 了 人 们 对 未 来计 算 机 的 看 法 。Jav a 语 言 是 一 种 很 有 潜 力 的 程 序 设 计 语 言 。 随 着 计 算 机 网 络 的 普 及 , Ja va 语 言 会 变得 越 来 越 重 要 。Jav a 语 言 的 特 点 主 要 是 : (1 ) 简 单 性语 言 本 身 的 组 成 成 份 较 少 , 结 构 较 小 。 与 已 有 语
28、言 类 似 , 用 户 容 易 熟 悉 掌 握 。 Java语 言 把 C , C+ + 中 一 般 程 序 员 很 少 使 用 的 、 容 易 出 错 的 特 征 加 以 剔 除 。 Java 语 言 略 去 了 运第 一 章 Java 语 言 的 背 景 3 算 符 重 载 、 多 重 继 承 等 模 糊 的 概 念 , 并 且 通 过 实 现 自 动 无 用 单 元 收 集 , 大 大 简 化 了 程 序 设计 者 的 内 存 管 理 工 作 。系 统 简 单 , 它 的 基 本 解 释 器 及 类 的 支 持 只 有 40 KB 左 右 , 加 上 标 准 类 库 和 线 程 的 支持
29、 也 只 有 215 KB 左 右 。Jav a 语 言 的 创 造 者 希 望 通 过 创 建 一 门 简 单 的 语 言 , 以 鼓 励 大 家 编 写 简 单 易 懂 的 程 序 。 各 类 Java 语 言 程 序 便 于 在 小 型 机 器 上 执 行 , 通 过 网 络 也 容 易 下 载 。(2 ) 面 向 对 象Jav a 语 言 从 基 础 上 就 被 设 计 成 面 向 对 象 的 , 不 能 在 类 外 面 定 义 单 独 的 数 据 和 函 数 。 所 有 对 象 都 派 生 自 同 一 个 基 类 O bject , 并 共 享 它 所 有 的 功 能 。也 就 是
30、说 , Java 语 言 最 外 部 的 数 据 类 型 是 对 象 。 Java 语 言 中 不 允 许 有 独 立 的 变 量 、 常 量 或 者 函 数 。 所 有 的 元 素 都 要 通 过 类 和 对 象 来 访 问 。(3 ) 分 布 性Jav a 语 言 从 设 计 上 就 支 持 网 络 应 用 , 通 过 它 提 供 的 类 库 可 以 处 理 T CP/ IP 协 议 , 用 户 可 以 通 过 U RL 地 址 在 网 络 上 很 方 便 地 访 问 其 它 对 象 , 它 是 分 布 式 语 言 。(4 ) 编 译 和 解 释 性Jav a 语 言 编 译 器 把 Ja
31、va 语 言 源 程 序 编 译 成 Jav a 字 节 码 。 在 不 同 的 平 台 上 , 用 该 平台 上 的 Java 语 言 解 释 器 来 执 行 Java 字 节 码 。 通 过 编 译 和 解 释 两 步 实 现 了 跨 平 台 。 字 节码 本 身 携 带 了 许 多 编 译 信 息 , 使 得 连 接 过 程 更 加 简 单 。(5 ) 鲁 棒 性Jav a 语 言 是 一 个 强 类 型 语 言 , 它 要 求 以 显 示 的 方 法 声 明 , 它 不 支 持 指 针 。 Java 语 言还 具 有 无 用 单 元 回 收 , 异 常 处 理 等 功 能 。 Java
32、 解 释 程 序 也 执 行 许 多 运 行 时 的 检 查 。 用Jav a 语 言 可 编 写 具 有 鲁 棒 性 的 软 件 。(6 ) 安 全 性Jav a 语 言 实 现 了 几 种 安 全 机 制 , 保 护 用 户 免 遭 病 毒 和 恶 意 代 码 的 袭 击 。 程 序 员 永 远 不 需 要 显 式 地 释 放 一 块 和 对 象 相 关 联 的 内 存 。 收 集 无 用 单 元 ( 由 J V M实 现 ) 是 Ja va 内 建 的 机 制 。 Java 语 言 不 允 许 对 指 针 进 行 算 术 运 算 , 具 有 很 高 的 安 全 性 。(7 ) 中 性 的
33、 体 系 结 构Jav a 语 言 编 译 程 序 生 成 的 字 节 码 与 体 系 结 构 无 关 。 Ja va 字 节 码 适 合 各 种 体 系 结 构 。 Jav a 语 言 程 序 能 在 任 何 系 统 上 运 行 , 只 要 该 系 统 实 现 了 Java 虚 拟 机 ( J VM ) 。 这 些 字 节 码 指 令 对 应 于 Java 虚 拟 机 中 的 表 示 , Ja va 解 释 器 得 到 字 节 码 后 , 对 它 进 行 转 换 , 使 之 能够 在 不 同 的 平 台 上 运 行 。(8 ) 可 移 植 性中 性 体 系 结 构 是 确 保 可 移 植 性
34、 的 重 要 组 成 部 分 。 Java 语 言 规 范 中 没 有 与 机 器 相 关 的 特 性 。 Jav a 语 言 的 基 本 数 据 类 型 ( 如 浮 点 数 和 整 数 ) 的 范 围 是 确 定 的 , 不 依 赖 于 具 体 平台 的 实 现 。 Java 语 言 环 境 本 身 也 是 可 移 植 的 。 Jav a 语 言 编 译 器 是 用 Java 语 言 编 写 的 , 解 释 器 是 用 C 语 言 编 写 的 。 Ja va 的 类 库 中 也 实 现 了 与 不 同 平 台 的 接 口 , 使 这 些 类 库 可 以 移植 。(9 ) 高 性 能面 向 对
35、 象 的 Java 语 言 程 序 设 计 4 和 其 它 解 释 执 行 的 语 言 ( 如 B ASIC ) 不 同 , Java 字 节 码 的 设 计 使 其 很 容 易 直 接 转 换 成对 应 于 特 定 C PU 的 机 器 码 或 汇 编 码 , 从 而 得 到 较 高 的 性 能 。(10) 多 线 程 性Jav a 语 言 对 多 线 程 提 供 支 持 。 多 线 程 机 制 使 应 用 程 序 能 够 并 行 , 同 步 机 制 可 以 保 证对 共 享 数 据 的 正 确 操 作 。通 过 使 用 多 线 程 , 程 序 设 计 者 可 以 分 别 用 不 同 的 线
36、 程 完 成 特 定 的 行 为 , 带 来 了 更 好 的 交 互 能 力 和 实 时 运 行 能 力 。(11) 动 态 性Jav a 语 言 设 计 成 适 应 于 变 化 的 环 境 , Java 中 的 类 是 根 据 需 要 而 装 入 的 。 在 类 库 中 可以 自 由 地 加 入 新 的 方 法 和 实 例 变 量 而 不 会 影 响 用 户 程 序 的 执 行 。 并 且 Ja va 语 言 通 过 接口 来 支 持 多 重 继 承 , 使 之 比 严 格 的 类 继 承 具 有 更 灵 活 的 方 式 和 扩 展 性 。总 之 , Java 是 一 种 程 序 设 计 语
37、 言 , 但 它 不 仅 仅 是 一 种 程 序 设 计 语 言 。(1 ) Java 首 先 是 一 种 面 向 对 象 的 程 序 设 计 语 言 。(2 ) Java 是 In ter net 上 的 通 用 语 言 , 也 是 In tern et 上 第 一 个 实 际 应 用 的 语 言 , 它 获 得了 广 泛 的 支 持 。(3 ) Java 是 一 种 编 程 环 境 , 它 包 括 一 个 相 当 规 范 、 较 大 的 类 库 。 这 些 类 库 给 Ja va 提 供 了 强 大 的 开 发 能 力 。(4 ) Java 是 一 种 操 作 环 境 , Ja va 语
38、言 在 Java 虚 拟 机 上 运 行 , 通 过 Java 虚 拟 机 , Java可 以 在 不 同 的 机 器 上 运 行 , 而 不 用 重 新 编 译 。 具 体 流 程 如 图 1-1 所 示 。编 译成 运行在 运 行在* .java * .class java virtual machine host machine图 1-1 Java 语 言 的 流 程Jav a 语 言 源 程 序 ( 文 件 * .jav a) 被 编 译 生 成 Java 语 言 字 节 码 文 件 ( 文 件 * .clas s ) , 字 节 码 运 行 在 Java 虚 拟 机 上 ( Java
39、 vir tu al machine ) , Jav a 虚 拟 机 运 行 在 宿 主 计 算 机 上 。1 .3 J ava 语 言 开 发 环 境目 前 已 出 现 了 多 种 Java 语 言 开 发 环 境 , 各 有 特 点 。 常 见 的 Ja va 语 言 开 发 环 境 有 以下 几 种 :1 . JDK ( Java Developers Kit , J ava 开 发 工 具 )1996 年 1 月 , Sun 公 司 推 出 JDK1 .0 , 它 是 命 令 行 工 具 , 包 括 :(1 ) javac: Java 编 译 器 , 其 作 用 是 生 成 包 含 字
40、 节 码 的 .clas s 文 件 ;(2 ) java : Java 解 释 器 , Java 虚 拟 机 , 也 叫 Ja va 字 节 码 解 释 器 , Java 运 行 环 境 。(3 ) jdb : Jav a 调 试 器 , 与 有 些 调 试 器 相 比 , jdb 不 复 杂 , 但 很 有 用 。(4 ) javadoc: A PI 文 档 生 成 器 , 将 Ja va 源 程 序 文 件 转 换 成 H T M L 文 档 ;第 一 章 Java 语 言 的 背 景 5 (5 ) a ppletviewer : Applet 小 程 序 浏 览 器 ;(6 ) jav
41、ah : 头 文 件 生 成 器 , 产 生 可 调 用 Java 过 程 的 C 过 程 , 或 建 立 能 被 Java 程 序 调用 的 C 过 程 的 头 文 件 。 通 过 此 方 法 , 可 用 Java 和 C 共 同 写 一 段 代 码 。(7 ) javap : Ja va 反 汇 编 器 , 也 叫 Java 字 节 码 反 汇 编 器 。用 J DK 要 使 用 大 量 的 命 令 行 工 具 , 包 括 Java 编 译 器 , 解 释 器 等 。 这 意 味 着 , 在 W in- dow s 环 境 下 还 要 打 开 DOS , 敲 入 命 令 和 正 确 的 参
42、 数 , 而 习 惯 于 在 诸 如 W indo ws 窗 口 模 式 环 境 下 操 作 的 人 , 是 不 愿 再 用 命 令 行 工 具 的 。2 . J avaWor kSh op1996 年 3 月 Sun 公 司 推 出 一 个 跨 平 台 的 Java 语 言 开 发 环 境 Java Wor kShop。 这 是 一 个 复 杂 的 Java 开 发 平 台 。 它 还 带 有 一 个 非 常 友 好 的 图 形 界 面 。Jav aWorkShop 像 JDK 的 一 个 成 熟 的 外 壳 ( s hell ) 程 序 , 能 使 人 在 熟 悉 、 方 便 的 W in
43、- dow s 环 境 下 编 程 。 使 用 Jav aWorkShop , 只 要 按 一 下 鼠 标 , 就 可 以 使 用 JDK 的 工 具 了 。Jav aWorkShop 是 基 于 We b 的 Java 快 速 开 发 环 境 , 可 开 发 和 发 布 Java applet s 和 应 用 程 序 。 它 是 由 一 套 Java 语 言 编 写 的 集 成 开 发 工 具 组 成 的 。 这 意 味 着 Java Wor kShop 是 多 平 台 的 。 这 给 开 发 者 提 供 了 灵 活 性 , 可 为 企 业 中 不 同 的 计 算 机 系 统 提 供 相 同
44、 的 Java 开 发 环 境 。Jav aWorkShop 是 由 Java 语 言 编 写 的 , 这 还 意 味 着 新 的 Ja va 类 能 被 自 动 识 别 和 支 持 , 而 不 必 等 待 新 版 本 去 支 持 新 类 。3 . Visual Ca feSyman tec 公 司 推 出 Cafe , Visu al C afe。 Vi sual Cafe 是 美 国 Syma n tec 公 司 推 出 的 可视 化 Java 语 言 集 成 开 发 环 境 。 可 以 在 该 环 境 中 完 成 Java 语 言 程 序 的 建 立 、 调 试 、 修 改 和运 行 等
45、 全 过 程 , 大 大 提 高 了 Ja va 语 言 程 序 的 开 发 效 率 , 缩 短 了 开 发 周 期 。4 . Visual J + +微 软 ( Microsoft ) 公 司 推 出 可 视 化 Java 语 言 集 成 开 发 环 境 Visu al J+ + , 它 继 承 了 微 软 公 司 集 成 开 发 环 境 ( IDE ) 的 一 贯 传 统 , 该 软 件 非 常 简 便 易 用 。开 发 环 境 中 菜 单 、 工 具 栏 以 及 窗 口 等 功 能 齐 全 , 解 除 了 J DK 命 令 的 记 忆 之 苦 。1 .4 J ava 语 言 程 序 实
46、例下 面 我 们 先 介 绍 两 个 简 单 的 Java 语 言 程 序 , 并 对 其 进 行 分 析 。 例 1 .1/ / 一 个 应 用 程 序 ( a pplication ) public clas s H elloWorld App public s tatic void mai n( St ring args ) Sys tem .ou t .prin tln( H elloWor ld ! ) ;本 程 序 的 作 用 是 输 出 下 面 一 行 信 息 :面 向 对 象 的 Java 语 言 程 序 设 计 6 H elloWor ld !程 序 中 , 首 先 用 保
47、留 字 class 来 声 明 一 个 新 的 类 , 其 类 名 为 H elloWor ldA pp , 它 是 一 个 公 共 类 ( public) 。 整 个 类 定 义 由 大 括 号 括 起 来 。在 该 类 中 定 义 了 一 个 方 法 main ( ) , 其 中 public 表 示 访 问 权 限 , 指 明 所 有 的 类 都 可 以使 用 这 一 方 法 ; s tatic 指 明 该 方 法 是 一 个 类 方 法 , 它 可 以 通 过 类 名 直 接 调 用 ; void 则 指 明方 法 m ain ( ) 不 返 回 任 何 值 。对 于 一 个 应 用
48、程 序 来 说 , 方 法 main ( ) 是 必 需 的 , 而 且 必 须 按 照 如 上 的 格 式 来 定 义 。 Jav a 解 释 器 在 没 有 生 成 任 何 实 例 的 情 况 下 , 以 方 法 main( ) 作 为 入 口 来 执 行 程 序 。 Java 语 言 程 序 中 可 以 定 义 多 个 类 , 每 个 类 中 可 以 定 义 多 个 方 法 , 但 是 最 多 只 能 有 一 个 公 共 类 , 方 法 m ain ( ) 也 只 能 有 一 个 , 作 为 程 序 的 入 口 。 方 法 m ain ( ) 定 义 中 , 括 号 ( ) 中 的 St
49、ring args 是 传 递 给 方 法 m ain ( ) 的 参 数 , 参 数 名 为 args , 它 是 类 St ring 的 一 个 实 例 , 参 数 可 以 为 0 个 或 多 个 , 每 个 参 数 用 “ 类 名 .参 数 名” 来 指 定 , 多 个 参 数 间 用 逗 号 分 隔 。 在 方 法 main( ) 的 实 现 ( 大 括 号 ) 中 , 只 有 一 条 语 句 。 例 如 在 上 例 中 :Sys tem .ou t .prin tln( H elloWor ld ! ) ;该 句 是 用 来 实 现 字 符 串 的 输 出 , 这 条 语 句 与 C 语 言 中 的 pri ntf 语 句 有 相 同 的 功 能 。 另 外 ,/ / 后 的 内 容 为 注 释 。现 在 我 们 可 以 运 行 该 程 序 。 首 先 把 它 放 到 一 个 名 为 H elloWorl dA pp .java 的 文 件 中 , 这 里 , 文 件 名 应 和 类 名 相 同 , 因 为 Java 解 释 器 要 求 公 共 类 必 须 放 在 与 其