1、Java 游戏编程导学陆光义 宋现锋 编 著清 华 大 学 出 版 社北 京内 容 提 要本书通过编写趣味游戏程序来引导读者学习 Java 编程的方法和技巧,形式新颖活泼,别具一格。 全书从 Java 语言基础知识和编制简单的程序入手 , 将 Java 编程的知识点有机地分散在 “幸运 52”, “速算 24”, “俄罗斯方块”等多个趣味游戏的程序设计示例中,使得 Java 语言中类、对象、属性、方法、接 口、继承等抽象概念变得具体形象,通俗易懂;并引导读者掌握 Java 中数组、字符串、事件处理、异常 处 理 、 图 形 和 多 媒 体 应 用 、 Swing 组件和网络等知识的运用和技巧。
2、本书以示例教学方式来组织内容,集趣味性、直观性、可操作性于一体,适合于 Java 初 学 者 及 对 游 戏程序感兴趣的电脑爱好者阅读参考。版 权 所 有 , 翻 印 必 究 。 举 报 电 话 : 010-62782989 13901104297 13801310933本书封面贴有清华大学出版社激光防伪标签,无标签者不得销售。图 书 在 版 编 目 CCIP) 数 据Java 游戏编程导学 /陆光义,宋现锋编著.北京:清华大学出版社,2004 ISBN 7-302-09776-3. J . 陆 宋 . JAVA 语言程序设计. TP312中国版本图书馆 CIP 数据核字(2004 )第 10
3、8635 号出 版 者:清华大学出版社 地 址:北京清华大学学研大厦http:/ 邮 编:100084社 总 几:010-62770175 客 户 服 务 : 010-62776969组稿编辑:科海 文稿编辑:洪英 封面设计:林陶 版式设计:科海印 刷 者:北京市耀华印刷有限公司 发 行 者:新华书店总店北京发行所开 本:7871092 1/16 印张:23.5 字数:572 千字 版 欠:2004 年 11 月第 1 版 2004 年 11 月第 1 次印刷书 号:ISBN 7 -302-09776-3/TP6750印 数:15000定 价 : 35.00 元 ( 1CD)本 书 如 存 在
4、 文 字 不 清 、 漏 印 以 及 缺 页 、 倒 角 、 脱 页 等 印 装 质 量 问 题 , 请 与 清 华 大 学 出 版 社 出 版 部 联 系 调换。联系电话:82896445前 言对 于 一 个 软 件 开 发 人 员 来 说 , 当 前 发 展 最 快 的 主 流 计 算 机 语 言 就 是 由 Sun公 司 开 发 的 Java语 言 。 Java语 言 , 因 为 它 的 简 单 易 用 、 平 台 无 关 性 和 健 壮 性 , 在 短 短 10年 时 间 之 内 , 很 快 就 发 展 成 为 当 前 最 流 行 的 编 程 语 言 。 同 时 , 为 了 适 应 企
5、 业 应 用 和 嵌 入 式 系 统 开 发 , Sun 公司推出了相应的J2EE 和J2ME 开发 工具包和响应规范。 目前, 它们己经成为各自相关领域 内 的 主 流 产 品 。 在 当 今 的 网 络 时 代 , 学 习 Java, 掌 握 Java编 程 , 对 程 序 员 来 说 不 再 是 可 有 可 无 , Java己 经 成 为 开 发 人 员 必 备 的 工 具 了 。本 书 讲 解 Java语 言 的 基 本 知 识 和 应 用 , 这 同 时 也 是 J2EE和 J2ME应 用 开 发 的 基 础 。本书的内容本 书 首 先 介 绍 了 Java基 础 知 识 , 之 后
6、 每 章 将 介 绍 一 个 或 多 个 精 心 制 作 的 趣 味 游 戏 , 它 们各自侧重于应用Java语 言的某些特性 , 循序渐进, 详细讲述了 Java语言 , 并给出大量示例 和非常有价值的编程方法。第1章介绍了Java特性和一些基本语法。在这一章,读者可以了解到 Java的历史、现状 及其发展前景,同时也将学会如何编写和运行一个简单的“Hello W orld”Java程 序 。第2章先讲解 Java面向对象 编程的一些基本概念, 然后通过 “幸运 52”模拟游戏 的编写, 让 读 者 对 Java的 面 向 对 象 编 程 有 更 深 的 理 解 。第3章讲解了 持有对象和异
7、常处理的知识, 同时编写了 “球迷必答” 和 “速算 24”游戏。 在 “球迷必答” 游戏中, 用户被询 问 5道 问题, 前一道问题必须答对 , 方可进入下一道问题 。 在 “速算24 ”游戏中 , 用户随意抽出4 张扑克牌, 用加、 减、 乘 、 除的方法将它们连接起来, 使得结果等于24。 这一章 通过这两个游戏来加深读者对数据结构、 异常处理等知识的理解。第 4章 通 过 “精 彩 闹 钟 ”和 “模 拟 钢 琴 ”游 戏 , 重 点 讲 解 Java在 图 形 和 多 媒 体 方 面 的 一 些 简 单 应 用 , AWT的 组 件 编 程 , 也 涉 及 到 事 件 处 理 及 简
8、 单 的 动 画 处 理 等 内 容 。第 5章 的 “拼 图 ”游 戏 和 文 曲 星 里 的 拼 图 游 戏 类 似 。 这 一 章 接 着 上 一 章 , 继 续 讲 述 Java 的 图 形 和 多 媒 体 应 用 , 以 及 Applet的 知 识 和 多 线 程 技 术 等 内 容 。第 6章 通 过 编 写 “记 事 本 ”和 “弹 球 ”游 戏 , 来 介 绍 Java语 言 编 程 中 的 Swing包 和 I/O知 识。Swing包基本己经取代AWT包,成为目前最流行的GUI编程技术:I/O知识是程序本地 化必不可少的条件。第7章编写了 一个 “俄罗斯方块” 游戏, 我们要
9、编写的俄罗斯方块是一个应用程序 OJava Application) , 不 再 是 嵌 到 网 页 里 的 那 种 小 应 用 程 序 OApplet) 。 游 戏 设 计 过 程 中 涉 及 到 游 戏框架、游戏界面的编写,菜单处理、变量的定义、算法设计以及预览功能的实现。通过 这 一 章 , 读 者 可 以 领 略 到 Java的 整 体 编 程 风 格 。 同 时 , 我 们 还 为 游 戏 添 加 了 其 他 功 能 , 如设计A bout对 话, 实现游戏分数的存档, 为游戏添加状态栏等。 在此我们可以学到如何定 义 类和类成员及其方法, 如何使用JBuilder 来创建一 个对话
10、框 , 并将对话框和主应用程序联系 起来。在 第 8章 中 , 我 们 将 把 这 个 游 戏 改 编 为 网 络 俄 罗 斯 方 块 游 戏 , 并 使 用 了 最 新 的 Java 2标 准Swing组件 , 使得界面更具有专业效果 。 本章主要讲解游戏的网络实现, 使游戏能够实现 多用户网络对战, 其中涉及到网络模块的编写, ServerSocket的 使用, 如何实现服务器/客户 间 即 时 通 信 , NetRead接 口 的 定 义 , 聊 天 界 面 的 设 计 , 网 络 协 议 的 设 计 , 网 络 连 接 的 实 现 及 如何将游戏打包并发布。 通过这些内容让读者领略Ja
11、va强大的 网络功能, 学习Java 的网络 编 程技巧。本书在选题、策划及编写时,努力做到以下几点: 趣味性 直观性 可操作性 循序渐进我们将电脑游戏和程序设计这两个精彩的世界嫁接在一起,希望读者能在充满趣味的 学习过程中轻松地入门,尝试编程的乐趣,以便尽早掌握这一现代编程工具。本书所附光盘的使用说明随本书带有一张光盘。 光盘中含有本书中涉及到的全部示例的源代码及各种资源文件, 以方便读者在学习过程中查阅、参考。编 者 2004年 10月目 录第 1章 Java基 础 .11.1 Java简介 .11.1.1 Java的 历 史 .11.1.2 Java的 特 性 .21.1.3 Java的
12、 应 用 .41.1.4 J2SE 1.5的 新 特 性 41.2 Java语 言 基 本 概 念 6 1.2.1 基 本 数 据 类 型 61.2.2 数组 .111.2.3 运 算 符 和 表 达 式 131.2.4 基 本 控 制 语 句 171.3 编 写 和 运 行 Java程 序 251.3.1 Java开 发 工 具 简 介 .251.3.2 Hello World 261.3.3 编 译 和 运 行 261.4 本 章 知 识 点 回 顾 .27第 2章 面 向 对 象 编 程 起 步 .322.1 类和对象 322.1.1 类 .322.1.2 对象 .342.1.3 一 个
13、 小 问 题 static352.2 类 的 继 承 和 多 态 .362.2.1 Java的 继 承 .362.2.2 abstract类 和 接 口 382.2.3 多态 .402.3 包 412.3.1 包 的 定 义 412.3.2 包 的 使 用 412.3.3 对 包 内 类 的 访 问 权 限 422.4 “幸 运 52”游 戏 .432.4.1 游 戏 效 果 说 明 432.4.2 编 写 HTML页 面 .442.4.3 编 写 Java代 码 .452.4.4 程 序 在 JBuilder中 的 编 写 552.5 进 一 步 实 践 .60目 录62.6 本 章 知 识
14、 点 回 顾 .60第 3章 持 有 对 象 与 异 常 处 理 .643.1 持 有 你 的 对 象 .643.1.1 Array( 数 组 ) .643.1.2 Collection( 集 合 ) .643.1.3 Mapping( 映 射 ) 683.2 “球 迷 必 答 ”.703.2.1 游 戏 规 则 703.2.2 游 戏 注 意 点 703.2.3 建 立 工 程 713.2.4 编 写 问 题 封 装 文 件 QuestionBean. 723.2.5 编 写 游 戏 界 面 733.2.6 处 理 事 件 763.2.7 使 用 UI编 辑 器 来 编 写 消 息 对 话
15、框 773.3 异 常 处 理 机 制 .813.3.1 基 本 异 常 813.3.2 捕 获 异 常 823.3.3 重 新 抛 出 异 常 853.3.4 标 准 Java异 常 .853.3.5 创 建 自 己 的 异 常 863.4 “速 算 24”游 戏 .873.4.1 游 戏 效 果 说 明 873.4.2 编 写 游 戏 规 则 883.4.3 创 建 工 程 和 Applet .883.4.4 设 计 游 戏 界 面 903.4.5 增 加 对 表 达 式 处 理 的 方 法 973.4.6 添 加 对 Applet中 按 钮 的 事 件 处 理 .993.4.7 进 一
16、步 实 践 1013.5 本 章 知 识 点 回 顾 .101第 4章 Java编 程 深 入 图 像 与 多 媒 体 1054.1 AWT简 介 1054.2 布 局 管 理 器 .1064.2.1 FlowLayout.1064.2.2 BorderLayout1074.2.3 GridLayout1074.2.4 CardLayout .1074.3 图像简介 1084.3.1 文 件 格 式 .1084.3.2 图 像 的 创 建 、 加 载 和 显 示 1084.3.3 ImageObserver1094.3.4 MediaTracker111目 录4.3.5 Graphics类 1
17、124.4 事件处理 1144.4.1 事 件 处 理 机 制 1144.4.2 事件类 .1154.4.3 事 件 监 听 器 接 口 1154.5 “精 彩 闹 钟 ”.1174.5.1 程 序 效 果 说 明 1174.5.2 实 现 简 单 的 界 面 1174.5.3 画 出 表 盘 和 表 针 1234.5.4 让 闹 钟 动 起 来 1254.5.5 给 闹 钟 加 上 声 音 1264.6 “模 拟 钢 琴 ”游 戏 .1284.6.1 游 戏 效 果 说 明 1284.6.2 实 现 简 单 的 界 面 1294.6.3 添 加 事 件 处 理 1334.6.4 继 续 完
18、善 这 个 游 戏 1374.6.5 加 上 音 响 效 果 1424.6.6 鼠 标 拖 动 时 实 现 琴 键 的 自 动 按 下 和 释 放 1444.6.7 动 画 效 果 的 改 进 1484.6.8 Java的 局 限 .1494.7 本 章 知 识 点 回 顾 .149第 5章 拼 图 游 戏 Applet和 线 程 .1565.1 Applet基 础 1565.1.1 Applet简 介 1565.1.2 Applet体 系 结 构 1565.1.3 Applet框 架 1575.1.4 其 他 一 些 有 用 的 方 法 1585.1.5 AppletContext接 口 的
19、 主 要 方 法 .1595.2 线程技术 1595.2.1 继 承 线 程 .1605.2.2 Thread和 Runnable1615.2.3 线 程 的 优 先 级 1625.2.4 线 程 同 步 .1645.2.5 多 线 程 技 术 1645.3 “拼 图 ”游 戏 .1655.3.1 游 戏 的 简 单 设 计 1665.3.2 实 现 简 单 的 界 面 1665.3.3 事 件 处 理 .1725.3.4 让 游 戏 能 够 判 断 游 戏 当 前 状 态 , 并 能 重 新 开 始 1805.3.5 让 游 戏 的 每 次 初 始 化 状 态 都 不 一 样 1825.3.
20、6 消 除 闪 烁 问 题 1835.3.7 让 游 戏 记 录 玩 家 所 用 的 时 间 , 并 计 算 出 分 数 183目 录85.3.8 利 用 多 线 程 技 术 来 实 现 计 时 器 , 记 录 玩 家 玩 的 时 间 1845.3.9 用 F1键 重 新 开 始 游 戏 1865.3.10 利 用 HTML的 param标 记 来 改 变 不 同 的 图 片 1875.3.11 增 加 预 览 的 功 能 1935.3.12 加 入 音 响 效 果 1965.3.13 CGI程 序 进 一 步 实 践 .1975.4 本 章 知 识 点 回 顾 .200第 6章 Swing和
21、 I/O简 介 2036.1 Swing组件简介 2036.1.1 JApplet 2036.1.2 按钮类 .2036.1.3 JComboBox.2106.1.4 滚 动 窗 格 .2106.1.5 树 .2106.1.6 表 格 ( JTable) 2116.2 I/O系 统 2136.2.1 输 入 和 输 出 2136.2.2 FilterInputStream和 FilterOutputStream 2156.2.3 File 2166.2.4 Java1.1的 I/O流 .2186.2.5 几 个 比 较 重 要 的 类 2186.3 “记 事 本 ”程 序 示 例 .2226.
22、3.1 建 立 工 程 和 框 架 文 件 2236.3.2 完 成 界 面 的 设 计 2246.3.3 添 加 “文 件 ”主 菜 单 事 件 响 应 2296.3.4 添 加 “编 辑 ”和 “关 于 ”主 菜 单 的 事 件 响 应 2326.3.5 添 加 按 钮 的 事 件 2336.4 “弹 球 ”游 戏 .2346.4.1 游 戏 的 简 单 设 计 2346.4.2 实 现 简 单 的 界 面 2346.4.3 让 小 球 运 动 起 来 2386.4.4 事 件 处 理 让 游 戏 能 够 玩 起 来 2426.4.5 让 游 戏 能 够 判 断 当 前 状 态 , 并 能
23、 重 新 开 始 2436.4.6 让 游 戏 记 录 玩 家 的 生 命 , 并 计 算 出 分 数 2446.4.7 加 入 音 响 效 果 2456.5 本 章 知 识 点 回 顾 .246第 7章 俄 罗 斯 方 块 游 戏 综 合 应 用 示 例 .2547.1 游 戏 效 果 说 明 .2547.2 游 戏 的 简 单 设 计 .2557.3 编 写 游 戏 框 架 .2557.3.1 编 写 游 戏 框 架 255目 录7.3.2 为 游 戏 编 写 菜 单 项 2587.3.3 为 菜 单 增 加 事 件 处 理 2617.4 开 始 编 写 游 戏 界 面 .2647.4.1
24、 在 Panel中 加 入 几 个 必 要 的 常 量 和 变 量 .2647.4.2 在 Panel上 画 出 游 戏 界 面 .2657.4.3 将 Panel加 到 框 架 里 去 .2677.5 开 始 编 写 游 戏 内 容 .2677.5.1 定 义 一 个 方 块 类 2677.5.2 定 义 描 述 游 戏 状 态 的 变 量 2687.5.3 初 始 化 游 戏 状 态 2697.5.4 编 写 产 生 新 的 方 块 组 的 算 法 2697.5.5 编 写 方 块 组 移 动 的 算 法 2717.5.6 编 写 将 一 行 消 去 的 算 法 2737.5.7 在 游
25、戏 里 实 现 一 个 线 程 2737.5.8 控 制 游 戏 开 始 2747.5.9 让 游 戏 暂 停 2757.5.10 让 游 戏 结 束 2767.5.11 判 断 游 戏 是 否 结 束 2767.5.12 让 玩 家 控 制 游 戏 添 加 事 件 处 理 2767.5.13 重 新 编 写 画 图 的 功 能 代 码 2787.5.14 类 的 同 步 方 法 2797.5.15 计 算 游 戏 的 得 分 和 当 前 游 戏 级 别 2807.6 添 加 游 戏 的 其 他 功 能 .2807.6.1 设 计 About对 话 框 2807.6.2 设 计 设 定 游 戏
26、 等 级 的 对 话 框 2857.6.3 为 游 戏 添 加 状 态 栏 2897.7 封 装 得 分 情 况 .2907.7.1 定 义 Score类 和 类 成 员 .2907.7.2 定 义 方 法 writeToFile() 2917.7.3 定 义 方 法 readFromFile() .2937.7.4 定 义 方 法 sortScore().2947.7.5 定 义 方 法 isScoreTop(int nScore).2947.7.6 定 义 方 法 insertNameScore(String sName,int nScore) 2957.7.7 定 义 方 法 getSc
27、ore()和 getName()2957.8 编 写 对 话 框 , 让 玩 家 输 入 名 字 .2967.8.1 输 入 玩 家 名 字 的 对 话 框 2967.8.2 查 看 排 名 榜 的 对 话 框 2987.9 本 章 知 识 点 回 顾 .301第 8章 网 络 俄 罗 斯 方 块 游 戏 Swing组 件 与 网 络 功 能 3048.1 游 戏 效 果 说 明 .3048.2 游 戏 的 简 单 设 计 .3068.3 编 写 简 单 的 网 络 模 块 .307目 录108.3.1 网 络 的 基 本 概 念 3078.3.2 ServerSocket简 介 .3098.
28、3.3 Socket简 介 .3108.3.4 InetAddress类 方 法 简 介 .3108.3.5 简 单 的 服 务 器 端 实 现 3118.3.6 简 单 的 客 户 端 实 现 3188.3.7 用 两 个 端 口 实 现 即 时 通 信 3198.3.8 定 义 接 口 NetRead 3258.3.9 如 何 使 用 这 个 模 块 server包 和 client包 .3268.4 改 编 游 戏 框 架 .3268.4.1 让 界 面 画 出 两 个 游 戏 区 域 3278.4.2 增 加 菜 单 及 其 事 件 处 理 功 能 3298.4.3 连 接 对 方 的
29、 对 话 框 设 计 3318.4.4 设 计 聊 天 界 面 3338.4.5 编 写 显 示 双 方 分 数 的 对 话 框 3358.4.6 编 写 警 告 对 方 不 能 运 行 某 个 命 令 的 提 示 框 3378.5 把 网 络 模 块 加 入 到 游 戏 之 中 .3408.5.1 网 络 协 议 的 设 计 3408.5.2 实 现 网 络 连 接 3418.5.3 实 现 聊 天 功 能 3468.5.4 能 够 显 示 对 方 玩 的 状 态 3478.5.5 当 一 方 消 去 一 行 时 , 对 方 随 机 增 加 一 行 3488.5.6 游 戏 开 始 、 停
30、止 、 暂 停 3508.5.7 一 方 结 束 时 , 使 对 方 结 束 , 并 弹 出 游 戏 得 分 状 况 的 对 话 框 3518.5.8 在 游 戏 关 闭 的 时 候 , 将 所 有 网 络 资 源 释 放 3518.6 将 游 戏 打 包 , 发 布 我 们 的 游 戏 .3528.6.1 打 包 的 好 处 3528.6.2 如 何 打 包 .3528.7 Java代 码 风 格 和 编 写 文 档 3568.7.1 Java的 代 码 风 格 .3568.7.2 变 量 命 名 规 则 3578.7.3 编 写 文 档 .3588.8 进 一 步 实 践 .3618.8.
31、1 游 戏 还 存 在 的 问 题 3618.8.2 使 游 戏 界 面 变 得 更 漂 亮 3628.9 本 章 知 识 点 回 顾 .362目 录4第 1 章 Java 基 础Java是 一 门 发 展 很 快 的 计 算 机 语 言 , 现 在 许 多 大 型 项 目 开 始 逐 渐 考 虑 使 用 Java来 编 写 。 Java以 其 独 特 的 可 跨 平 台 运 行 和 开 发 边 度 快 、 维 护 方 便 等 特 性 受 到 许 多 开 发 者 的 青 睐 。 这 一章我们将要介绍一些Java的基础知 识, 从中读者可以了解到 Java的历史 、 现状和前景, 同 时 也 会
32、 了 解 到 如 何 编 写 和 运 行 一 个 简 单 的 Java程 序 。1.1 Java简 介Java是 由 Sun公 司 开 发 的 新 一 代 编 程 语 言 , 使 用 它 可 在 各 种 不 同 机 器 、 不 同 操 作 平 台 的 网络环境中开发软件和使用软件。不论你使用的是哪一种网络浏览器,哪一种计算机,哪 一 种 操 作 系 统 , 只 要 机 器 上 己 经 安 装 了 Java运 行 环 境 ( Java Runtime Environment) 或 者 系 统 己 经 注 明 了 “支 持 Java”, 你 就 可 以 看 到 嵌 有 Java小 应 用 程 序
33、( Applet) 的 生 动 活 泼 的 网 页, 你也可以运行别人在任何机器、 任何操作系统上编写和编译 的 Java应用程序。 Java正在 逐步成为Internet 上主要的开发语言,也正在成为许多大型网络系统的首选开发语言。它彻 底 改 变 了 应 用 软 件 的 开 发 模 式 , 带 来 了 自 PC机 面 世 以 来 的 又 一 次 技 术 革 命 , 为 迅 边 发 展 的 信息世界增添了新的活力。1.1.1 Java的 历 史Sun的 Java语 言 开 发 小 组 成 立 于 1991年 , 其 目 的 是 开 拓 消 费 类 电 子 产 品 市 场 , 例 如 , 交
34、互 式 电 视 、 烤 面 包 机 等 。 Sun内 部 人 员 把 这 个 项 目 称 为 Green, 那 时 World Wide Web还 没 有 发展呢! 该小组的领导人Ja mes Gosling是一位非常杰出的程序员 。 他出生于19 57年, 于1 984 年加盟Sun Microsystem公 司 , 之 前 在 一 家 IBM研 究 机 构 工 作 。 他 是 Sun NeWs窗 口 系 统 的 总 设 计 师 , 也 是 第 一 个 用 C实 现 的 EMACS的 文 本 编 辑 器 COS MACS的 开 发 者 。由于消费类电子产品追求的是可靠性、标准化、使用简单、费
35、用低等特性,对采用什 么处理器不感兴趣。所以,迫切需要一种语言能够使所开发的系统与应用平台(例如:无 论是什么型号的交互式电视)无关,使得在一种平台上开发的控制系统能够很方便地移植 到各种类型的平台上。为了实现系统与平台无关的目标,Gosling 决定改写C 编译器。但是, Gosling马上就发 现仅仅靠改写是无法满足需要的, 于是在19 91年 6月决定自己开发一门新的语言 。 他为这门 语 言 起 名 为 Oak, 这 就 是 Java语 言 的 前 身 。 因 为 Oak是 Sun公 司 另 一 种 语 言 的 注 册 商 标 , 所 以 Java是 后 来 才 改 的 名 。Gosl
36、ing在开始写Java 时,不仅仅扩充了语言机制本身,更注重于语言所运行的软硬件Java 游戏编程导学2环 境 。 Gosling在 设 计 中 采 用 了 虚 机 器 码 ( Virtual Machine Code) 方 式 , 即 Java语 言 编 译 后 产生的是虚机器码, 虚机器码由Java 虚拟机解释执行, Java虚 拟机中有一个解释器。 每一个 操 作 系 统 都 可 以 创 建 一 个 Java虚 拟 机 以 解 释 执 行 Java的 虚 机 器 码 。 这 样 一 来 , Java就 成 了 与 平台无关语言。到 了 1994年 , WWW己 如 火 如 荼 地 发 展
37、 起 来 。 Gosling意 识 到 WWW需 要 一 个 中 性 的 浏 览器,它不依赖于任何硬件平台和软件平台,它应是一种实时性较高、安全可靠、有交互 功 能 的 浏 览 器 。 于 是 Gosling决 定 用 Java开 发 一 个 新 的 Web浏 览 器 , 这 就 是 Hot Java浏 览 器 。 它 虽 然 没 有 获 得 大 的 发 展 , 但 是 却 展 示 了 Java可 能 带 来 的 广 阔 市 场 前 景 。 Hot Java在 1995年 5月 23日 发 布 , 在 业 界 引 起 了 巨 大 的 轰 动 , Java的 地 位 也 随 之 得 到 肯 定
38、。 又 经 过 一 年 的 试 用 和改进,Java 1.0版 终 于 在 1996年 初 正 式 发 布 。Hot Java浏览 器的出现, 也导致了几个主流浏览器开始支持Java小应用程 序 (A pplet) 。 现 在 , IE、 NS都 能 够 支 持 Java Applet, 使 得 页 面 更 加 丰 富 多 彩 了 。1997年 11月 , 国 际 标 准 化 组 织 正 式 批 准 了 Sun等 公 司 提 出 的 Java标 准 , Java标 准 化 促 进 了 它 的 进 一 步 发 展 , 也 标 志 着 Java语 言 的 成 熟 。目前Java 己经 发展了多个版
39、本, 从1.0 2到1.1、 1.2 到目前的 1.5 版本。 Java 1.2以后的版 本统称为Java 2 。 每 次 新 版 本 发 布 , 都 会 给 Java注 入 新 的 生 命 力 。1.1.2 Java的 特 性Java具有两 大 特性: 可跨平台运行, 面向对象。 这两个特性是Java 得以迅 边发展的重要 原因。跨平台运行机制Java程 序 具 有 可 跨 平 台 运 行 的 特 性 , 这 个 特 性 取 决 于 它 的 应 用 程 序 的 运 行 机 制 。 通 常 计 算 机 语 言 的 运 行 机 制 如 图 1.1所 示 。编译器Pentium 可 运 行 的 B
40、inary码源代码编 译 器 PowerPC 可 运 行 的 Binary码编 译 器 SPARC 可 运 行 的 Binary码图 1.1 通常计算机语言的运行机制而 Java的 运 行 机 制 则 如 图 1.2所 示 。第 1 章 Java 基础 3源代码虚机器码不同平台下的编译器不同平台下的解释器图 1.2 Java 运行机制由图1.1、 图 1.2可以得知, 普通的计算机编程语言大都是将源代码编译成机器码, 对不 同的平台其机器码是不同的。 由于不同平台的特性和应用程序接 口 (A PI) 的不同, 其源代 码 往 往 也 是 不 同 的 。 这 就 造 成 了 普 通 编 程 语
41、言 在 移 植 上 的 困 难 。 而 Java引 进 的 虚 机 器 码 的 概念解决了这个问题。 因为所有的Jav a解释器都是按照同一个规则来解释执行 Java虚机 器码 的 , 所 以 所 有 的 Java源 代 码 最 终 生 成 的 虚 机 器 码 对 不 同 平 台 都 是 一 样 的 。 同 时 所 有 的 虚 机 器 码 都 是 运 行 在 相 同 的 Java虚 拟 机 上 , 所 以 , Java对 于 不 同 的 平 台 却 可 以 有 相 同 的 源 代 码 。 这 就 是 Java可 跨 平 台 运 行 的 特 性 。对 于 运 行 于 Internet上 的 网
42、络 程 序 , 一 个 最 大 的 要 求 是 可 以 跨 平 台 运 行 。 这 是 因 为 网 络 上 会 存 在 许 多 不 同 的 机 器 、 不 同 的 操 作 系 统 。 而 Java的 跨 平 台 特 性 使 之 成 为 最 理 想 的 网 络 编程语言。面向对象面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。 对象之间通过信息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象 都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心、以算法为驱动的 话,面向对象的编程语言则是以对象为中心、以信息为驱动。用公式表示,过程式编程语 言为:
43、程序=算法 +数据:而面向对象编程语言为:程序=对象+信息。所有面向对象编程语言都支持3个概念:封装、多态性和继承,Java也不例外。Java 提 供了类机制和接口。通过类和接口,我们就可以实现对方法和数据的封装,同时通过类的 继 承 以 及 继 承 时 的 多 态 性 , 我 们 实 现 了 代 码 复 用 。 Java程 序 是 由 一 个 一 个 的 类 组 成 , 这 决 定了Java 是一 种纯粹的面向对象的编程语言 。 Java的这个特性决定了使用Java语言开发 产品 的高边度和产品的可维护性。其他特性Java还 有 一 些 特 性 , 比 如 分 布 性 、 健 壮 性 、 安
44、 全 性 、 支 持 多 线 程 等 等 , 这 些 特 性 都 反 映了Java 语言 设计的精妙。 同时, Java也是一门简单易学的语言 , 相信读者很快就会认识到 这一点。Java 游戏编程导学41.1.3 Java的 应 用AppletApplet是嵌 入 到网页里用于装饰网页或者完成某种特殊功能的小应用程序。 Applet由 浏 览 器 中 的 Java解 释 器 负 责 解 释 执 行 。ApplicationJava Application就 是 独 立 运 行 在 Java虚 拟 机 上 的 一 系 列 的 应 用 程 序 。servletservlet是 运 行 在 服 务
45、 器 端 的 小 程 序 , 它 负 责 处 理 客 户 端 传 来 的 请 求 ( request) , 然 后 传 给客户端一个响应(response)。J2SE、 J2EE 和 J2MEJ2SE(J ava 2 Standard Edition) 就是我们 印象中的普通的Java 语言 , 这是一个标准的A PI和 工 具 包 , 是 J2EE和 J2ME的 基 础 。J2EE( Java 2 Enterprise Edition) , 顾 名 思 义 , 它 向 企 业 级 用 户 提 供 服 务 , 使 得 企 业 可 以把自身的信息通过Internet的形式发布,也就是电子商务技术
46、。同时可以用于解决电子政 务等一系列问题。电子商务和信息技术的快边发展及对它的需求给应用程序开发人员带来了新的压力。 为了降低成本并加快企业应用程序的设计和开发,J2EE平台提供了一个基于组件的方法, 来设计、开发、装配及部署企业应用程序。J2EE平台提供了多层分布式应用模型、组件重 用、一致化的安全模型以及灵活的事务控制。J2ME( Java 2 Micro Edition) 类 似 于 J2EE的 一 个 平 台 。 其 实 Java最 早 的 目 的 就 是 满 足 一些嵌入式装置的开发需要。在Java 1.0.2以 前 的 几 个 版 本 , 这 项 功 能 一 度 被 忽 略 , 但
47、 是 在 1.0.2版 本 的 时 候 进 行 了 重 新 开 发 。 当 发 展 到 Java 2的 时 候 , Sun推 出 了 一 个 专 门 的 软 件 包 J2MEWDK, 支 持 进 行 嵌 入 式 开 发 。 目 前 大 家 关 注 最 多 的 是 手 机 游 戏 的 开 发 , 但 是 J2ME能 做的远远不止这些。如 果 读 者 对 J2EE或 者 是 J2ME有 兴 趣 的 话 , 请 到 http:/ 寻 找 更 多 的 信 息 。1.1.4 J2SE 1.5的 新 特 性J2SE 1.5( 开 发 代 号 Tiger) 是 Java平 台 和 语 言 上 的 一 个 重
48、 要 修 改 , 目 前 主 要 包 括 了 15 个 JSR的 请 求 和 其 他 一 些 类 似 的 更 新 。 这 次 的 Release主 要 关 注 于 几 个 关 键 的 主 题 : 品 质 、 监视和管理、性能和可扩展性、轻松的开发以及桌面客户端。轻 松 的 开 发 ( Ease of Development)你可能己经听到过关于减轻开发难度而做的Java 语言上的修改。 这次J 2SE根据J SR的要 求 实 现 以 下 几 个 JSR: JSR 201 包 含 了 4个 修 改 , JSR 175的 核 心 是 支 持 元 数 据 ( metadata) ,第 1 章 Jav
49、a 基础 5而JSR 14则 规 范 了 泛 型 。 元 数 据 功 能 提 供 了 声 明 式 的 开 发 , 并 且 取 代 了 一 些 工 具 的 代 码 生 成和维护功能。 泛型提升了无需手动转型 ( manual casting) 的代码复用, 通常 manual casting 都会带来类型安全性上的一些问题。另 外 的 4个 修 改 分 别 是 :( 1) 用 for循 环 来 遍 历 容 器 ( Collection 类 型 ) , 而 不 需 要 显 式 的 声 明 容 器 的 迭 代 器( Iterator) 。( 2) 枚 举 类 型 提 供 了 超 越 类 似 final static int的 、 增 强 的