BlueJ 教 程 版 本 1.2 针 对 BlueJ 版 本 1.1.x Michael Kölling 澳 洲 Monash 大 学 网 络 计 算 学 院 清 华 大 学 计 算 机 系 知 识 工 程 组 郝 建 文 顾 志 峰 翻 译 - 1 -
1 前 言 4 1.1 关 于 BlueJ 4 1.2 本 书 范 围 及 读 者.4 1.3 版 权, 使 用 许 可 以 及 重 新 发 布 4 1.4 反 馈.4 2 开 始 5 2.1 安 装.5 2.2 启 动 BlueJ.5 2.3 打 开 一 个 工 程.6 3 基 础 知 识 - 编 辑 \ 编 译 \ 执 行 7 3.1 创 建 对 象..7 3.2 执 行..9 3.3 编 辑 一 个 类..11 3.4 编 译..11 3.5 使 用 编 译 器 错 误 帮 助..12 4 进 一 步 13 4.1 观 察 对 象..13 4.2 组 装..16 5 创 建 一 个 新 工 程 17 5.1 创 建 工 程 目 录..17 5.2 创 建 类..18 5.3 创 建 依 赖 关 系..18 5.4 删 除 元 素..18 6 调 试 20 6.1 设 置 断 点..20 6.2 单 步 执 行..21 6.3 查 看 变 量..22 6.4 停 止 调 试..22 7 创 建 独 立 的 应 用 程 序 22 8 创 建 Applet 23-2 -
8.1 运 行 一 个 Applet.24 8.2 创 建 一 个 Applet.24 8.3 测 试 一 个 Applet.24 9 其 他 的 操 作 25 9.1 在 bluej 中 打 开 非 BlueJ 的 软 件 包...26 9.2 在 工 程 中 加 入 已 有 的 类 文 件.26 9.3 调 用 main 函 数 和 其 他 静 态 成 员 方 法...26 9.4 使 用 类 库.26 10 总 结 27-3 -
1 前 言 1.1 关 于 BlueJ 这 份 教 程 介 绍 了 如 何 使 用 BlueJ 这 个 编 程 环 境 BlueJ 是 一 个 专 门 为 入 门 级 教 学 设 计 的 Java TM 开 发 环 境 它 是 由 澳 大 利 亚 墨 尔 本 Monash 大 学 BlueJ 小 组 设 计 并 开 发 的 需 要 更 多 信 息 请 访 问 :http://bluej.monash.edu/ 1.2 本 书 范 围 及 读 者 这 份 教 程 主 要 针 对 那 些 想 让 自 己 熟 悉 如 何 使 用 这 个 开 发 环 境 的 读 者 而 不 会 讨 论 这 个 环 境 设 计 过 程 中 的 结 构 组 织 和 那 些 值 得 研 究 的 问 题 这 份 教 程 不 打 算 介 绍 如 何 使 用 Java, 因 此 读 者 应 该 已 经 对 Java 比 较 熟 悉 这 份 教 程 不 是 一 份 全 面 的 环 境 参 考 手 册 许 多 细 节 问 题 没 有 涉 及 到 -- 通 过 简 单 准 确 的 介 绍 突 出 重 点, 而 不 是 对 各 个 专 题 全 面 的 讨 论 大 多 数 小 结 有 一 个 一 行 左 右 的 本 节 小 结 作 为 结 尾 第 0 小 结 只 是 重 复 了 一 遍 这 些 小 结, 作 为 一 个 快 速 的 参 考 1.3 版 权, 使 用 许 可 以 及 重 新 发 布 BlueJ 系 统 以 及 这 份 教 程 对 任 何 人 任 何 用 途 都 是 免 费 的 这 个 系 统 以 及 它 的 文 档 可 以 被 重 新 发 布 而 不 需 要 任 何 费 用 没 有 经 过 本 系 统 作 者 的 授 权, 任 何 人 不 能 销 售 BlueJ 系 统 或 者 包 含 该 系 统 的 软 件 包 并 从 中 获 利 BlueJ 版 权 所 有 M. Kölling, J. Rosenberg 1.4 反 馈 我 们 欢 迎 鼓 励 任 何 形 式 的 对 BlueJ 和 这 份 教 程 的 反 馈 意 见, 包 括 声 明, 问 题, 更 正, 批 评 等 请 发 信 给 Michael Kölling (mik@monash.edu.au) - 4 -
2 开 始 2.1 安 装 BlueJ 是 作 为 一 些 Java 的 class 文 件 以 jar 文 件 格 式 发 布 的 安 装 十 分 简 单 安 装 前 的 准 备 你 必 须 在 你 的 系 统 上 安 装 了 JDK1.2.2 或 更 高 的 版 本 一 些 函 数 在 JDK1.3 下 工 作 会 更 好 一 些, 所 以 推 荐 安 装 或 升 级 到 最 新 的 JDK 版 本 如 果 你 还 没 有 安 装 JDK, 你 可 以 从 sun 的 网 站 下 载 :http://java.sun.com/j2se. 得 到 BlueJ BlueJ 的 发 布 文 件 通 常 叫 做 bluej-xxx.jar, 其 中 xxx 是 版 本 号 比 如,BlueJ 版 本 1.1.1 的 发 布 文 件 名 是 bluej-111.jar, 你 可 以 从 光 盘 上 拷 贝 该 文 件, 或 者 从 BuleJ 的 网 站 下 载 : http://bluej.monash.edu/. 关 于 SDK,JDK 和 JRE 有 的 时 候 存 在 一 些 混 淆 在 Java 的 各 个 不 同 发 布 版 本 之 间 :SDK,JDK,JRE 你 应 该 安 装 的 是 最 新 版 的 Java 2 SDK( 软 件 开 发 包 ) JDK 和 SDK 是 一 样 的, 只 是 JDK 是 一 个 旧 的 名 字 Sun 公 司 已 经 改 变 了 他 们 的 命 名 规 则 在 某 些 场 合, 但 是 有 的 时 候 旧 的 名 字 还 在 使 用, 比 如 安 装 了 Java 2 SDK 版 本 1.3, 那 么 缺 省 的 安 装 目 录 是 jdk1.3 JRE(Java 运 行 环 境 ) 却 有 所 不 同, 它 是 能 运 行 Java 程 序 的 SDK 的 一 个 子 集, 对 BlueJ 而 言,JRE 是 不 够 的 我 们 需 要 SDK 是 因 为 SDK 包 含 了 一 些 BlueJ 要 使 用 的 开 发 工 具 JRE 在 SDK 安 装 的 时 候 是 会 自 动 安 装 的 安 装 Windows: 双 击 安 装 文 件 (bluej-xxx.jar) 如 果 你 的 系 统 没 有 配 置 执 行 jar 文 件, 那 么 双 击 可 能 会 不 起 作 用 在 这 种 情 况 下, 请 打 开 一 个 DOS 窗 口 并 参 考 下 面 的 UNIX 安 装 方 法 Unix: 使 用 下 面 的 命 令 运 行 安 装 程 序 注 意 : 在 这 个 例 子 中, 我 使 用 发 布 文 件 bluej-111.jar- 你 应 该 使 用 你 得 到 的 文 件 的 名 字 ( 使 用 正 确 的 版 本 号 ) <jdk-path>/bin/java jar bluej-111.jar <jdk-path> 是 JDK 安 装 的 目 录 接 着 会 出 现 一 个 窗 口, 让 你 选 择 Blue 的 安 装 目 录 和 JDK 的 版 本 用 来 运 行 BlueJ 注 意 : BlueJ 的 安 装 路 径 ( 任 何 一 个 父 目 录 ) 中 不 能 有 任 何 空 格 ( 比 如 : Program files )! 单 击 Install, 完 成 之 后,BlueJ 就 装 完 了 如 果 你 有 任 何 问 题, 请 访 问 BlueJ 网 站 上 的 FAQ 2.2 启 动 BlueJ BlueJ 的 安 装 程 序 会 在 安 装 目 录 里 安 装 一 个 名 叫 BlueJ 的 脚 本 在 图 形 界 面 里, 只 要 双 - 5 -
击 那 个 文 件 便 可 启 动 BlueJ 在 命 令 行 界 面 ( 比 如 :Unix 或 者 Dos), 你 可 以 带 参 数 或 不 带 参 数 启 动 BlueJ: $ bluej 或 者 $ bluej example/people 2.3 打 开 一 个 工 程 BlueJ 的 工 程 和 标 准 的 Java 包 一 样, 是 一 个 包 含 工 程 文 件 的 目 录 如 果 你 是 从 命 令 行 启 动 的 BlueJ, 并 且 启 动 时 你 给 出 了 一 个 工 程 目 录 作 为 参 数, 那 么 工 程 会 自 动 被 打 开 如 果 启 动 时 没 有 加 参 数, 那 么 可 以 使 用 工 程 - 打 开 菜 单 来 选 择 并 打 开 一 个 工 程 - 6 -
3 基 础 知 识 - 编 辑 \ 编 译 \ 执 行 为 了 学 习 在 这 一 节, 打 开 Blue 的 发 布 版 本 中 的 工 程 people 你 能 够 在 BlueJ 安 装 目 录 下 的 example 目 录 下 找 到 这 个 工 程 打 开 工 程 后 你 因 该 可 以 看 到 和 图 1 相 似 的 窗 口, 这 个 窗 口 可 能 看 上 去 和 图 1 不 完 全 一 样 在 你 的 系 统 上, 但 区 别 应 该 很 小 图 1:BlueJ 主 窗 口 3.1 创 建 对 象 BlueJ 的 一 个 很 基 本 的 特 点 是 你 不 仅 仅 能 够 执 行 一 个 完 整 的 应 用 程 序, 而 且 能 直 接 和 任 何 类 的 对 象 交 互 并 执 行 其 中 的 公 共 (public) 方 法 在 BlueJ 中 一 个 执 行 过 程 通 常 通 过 创 建 一 个 对 象, 然 后 调 用 其 中 的 方 法 来 完 成 这 种 模 式 在 开 发 一 个 应 用 软 件 的 过 程 中 是 十 分 有 帮 助 的 - 你 可 以 单 独 测 试 每 个 类 一 旦 它 被 写 完 这 样 就 没 有 必 要 一 开 始 就 把 整 个 应 用 程 序 写 完 旁 注 : 静 态 方 法 能 够 被 直 接 调 用 而 不 需 要 先 创 建 一 个 类 main() 是 一 个 静 态 方 法, 因 此 我 们 可 以 做 和 通 常 在 一 个 Java 应 用 程 序 中 发 生 事 件 的 相 同 的 事 情 - 通 过 执 行 静 态 方 法 main() 启 动 一 个 应 用 程 序 我 们 会 在 后 面 继 续 讨 论 现 在, 我 们 来 做 一 些 其 他 有 趣 的 不 能 在 一 般 的 Java 环 境 中 做 到 的 事 情 - 7 -
你 看 到 的 主 窗 口 中 间 的 方 块 ( 标 注 了 数 据 库, 人, 教 员 和 学 生 ) 是 代 表 了 在 这 个 应 用 程 序 中 用 到 的 类 的 图 标 右 键 单 击 类 的 图 标, 你 会 得 到 一 个 包 含 能 够 应 用 到 该 类 的 操 作 的 一 个 菜 单 ( 图 2) 图 中 显 示 的 操 作 由 new 操 作 符 和 类 中 定 义 的 各 个 构 造 函 数 的 组 合, 以 及 BlueJ 环 境 提 供 的 一 些 操 作 组 成 图 2: 类 操 作 ( 弹 出 菜 单 ) 我 们 希 望 创 建 一 个 教 员 对 象, 所 以 你 应 该 右 键 单 击 教 员 图 标 ( 会 弹 出 图 2 中 显 示 的 菜 单 ) 这 个 菜 单 显 示 了 两 个 构 造 函 数 可 以 用 来 构 造 教 员 类 一 个 有 参 数 一 个 没 有 首 先, 选 择 没 有 参 数 的 构 造 函 数 弹 出 的 对 话 框 应 该 如 图 3 所 示. - 8 -
图 3: 创 建 没 有 参 数 的 对 象 这 个 对 话 框 要 求 你 输 入 一 个 被 创 建 对 象 的 名 字 同 时 提 供 了 一 个 缺 省 的 名 字 (staff_1) 这 个 缺 省 的 名 字 对 我 们 来 说 足 够 好 了 所 以 马 上 点 击 OK 一 个 教 员 对 象 就 会 被 创 建 一 旦 一 个 对 象 被 创 建, 它 会 被 放 在 窗 口 底 部 的 对 象 槽 里 ( 图 4) 图 4: 一 个 对 象 在 对 象 槽 里 你 可 能 已 经 注 意 到 Person 类 被 标 注 为 <<abstract>>( 它 是 一 个 抽 象 类 ) 你 会 发 现 ( 如 果 你 试 一 试 ) 你 不 能 创 建 抽 象 类 的 对 象 ( 就 跟 Java 语 言 定 义 的 规 则 一 样 ) 小 结 : 要 创 建 一 个 对 象, 从 类 菜 单 中 选 择 一 个 构 造 函 数 3.2 执 行 现 在 你 已 经 创 建 了 一 个 对 象, 你 可 以 执 行 它 的 公 共 (public) 方 法 用 右 键 单 击 对 象 图 标, 就 会 弹 出 一 个 包 含 对 象 操 作 的 菜 单 ( 图 5) 这 个 菜 单 显 示 了 该 对 象 所 有 可 执 行 的 方 法 和 两 个 BlueJ 环 境 提 供 的 操 作 ( 查 看 对 象 和 删 除 对 象 ) 我 们 会 在 后 面 讨 论 这 些 功 能 首 先, 让 我 们 集 中 精 力 在 方 法 上 - 9 -
图 5: 对 象 菜 单 你 可 以 看 到 菜 单 里 有 两 个 方 法 getroom 和 setroom, 分 别 设 置 和 返 回 这 个 教 员 的 房 间 号 试 着 调 用 getroom 只 要 简 单 的 从 菜 单 里 选 择 它, 它 就 会 被 执 行 一 个 对 话 框 会 出 现 向 你 显 示 调 用 的 结 果 ( 图 6) 在 上 面 的 情 况 下, 结 果 是 (unknown room), 因 为 我 们 还 没 有 为 这 个 人 指 定 房 间 号 图 6: 显 示 一 个 调 用 函 数 的 结 果 从 父 类 继 承 而 来 的 方 法 在 一 个 子 菜 单 中 在 对 象 弹 出 菜 单 的 顶 部 有 两 个 子 菜 单 一 个 包 含 从 Object 继 承 而 来 的 方 法, 另 一 个 包 含 从 Person 继 承 而 来 的 方 法 ( 图 5) 你 可 以 调 用 的 Person 的 方 法 ( 比 如 :getname), 通 过 选 择 子 菜 单 中 的 函 数 名 试 一 下 你 会 发 现 结 果 同 样 的 奇 怪 : 它 返 回 (unknown name), 因 为 我 们 还 没 有 给 这 个 人 取 一 个 名 字 现 在 让 我 试 着 来 指 定 一 个 房 间 号 这 个 操 作 演 示 了 如 何 调 用 有 参 数 的 方 法 ( 调 用 getroom 和 getname 有 返 回 值, 但 没 有 参 数 ) 通 过 选 择 菜 单 中 相 应 的 项 调 用 setroom 一 个 对 话 框 会 出 现 提 示 你 输 入 参 数 ( 图 7) - 10 -
图 7: 调 用 带 参 数 的 函 数 在 这 个 对 话 框 的 最 上 端 显 示 的 是 被 调 用 方 法 的 接 口 声 明 ( 包 括 注 释 和 定 义 ) 下 面 是 一 个 文 本 框, 你 可 以 在 里 面 输 入 参 数 上 面 的 定 义 告 诉 我 们 需 要 一 个 String 类 型 的 参 数 在 文 本 框 里 输 入 新 的 名 字 作 为 一 个 String( 包 括 引 号 ), 然 后 点 击 OK 这 样 就 结 束 了 - 因 为 这 个 方 法 没 有 返 回 值, 所 以 没 有 结 果 对 话 框 再 一 次 调 用 getname 来 检 查 名 字 是 否 真 的 改 变 了 对 对 象 的 创 建 和 方 法 调 用 练 习 一 段 时 间 然 后 试 着 调 用 有 参 数 的 构 造 函 数 和 更 多 的 方 法 直 到 你 对 这 些 操 作 熟 悉 为 止 小 结 : 要 执 行 一 个 方 法, 从 对 象 菜 单 中 选 择 它 3.3 编 辑 一 个 类 到 目 前 为 止, 我 们 只 涉 及 到 了 一 个 对 象 的 接 口 现 在 是 时 候 窥 探 一 下 对 象 内 部 了 你 能 够 看 到 一 个 类 的 实 现 通 过 在 类 菜 单 里 选 择 编 辑 类 实 现 ( 提 示 : 右 键 单 击 类 图 标 就 会 跳 出 类 菜 单 ) 双 击 类 图 标 可 以 实 现 同 样 的 功 能 这 份 教 材 对 BlueJ 的 编 辑 器 没 有 很 深 入 的 描 述, 但 是 它 的 使 用 应 该 来 说 是 很 简 单 的 关 于 编 辑 器 的 细 节 描 述 在 后 面 会 单 独 列 出 现 在, 打 开 Stuff 类 的 实 现 找 到 getroom 方 法 的 实 现 正 如 函 数 所 说 的 那 样, 它 会 返 回 该 教 员 的 房 间 号 让 我 们 改 变 这 个 方 法, 在 函 数 返 回 值 的 前 面 加 上 一 个 room 前 缀 ( 这 样 这 个 方 法 就 会 返 回, room G..4.24 而 不 是 G..4.24 ) 我 们 通 过 修 改 下 面 这 一 行 做 到 这 一 点 return room; 改 为 return room + room; BlueJ 完 全 支 持 Java, 所 以 没 有 什 么 特 殊 的 要 求 关 于 你 如 何 修 改 你 的 类 实 现 只 要 遵 循 Java 规 范 即 可 小 结 : 要 编 辑 类 的 源 码, 双 击 类 图 标 3.4 编 译 改 变 代 码 之 后 ( 在 你 做 任 何 其 他 事 情 之 前 ), 检 查 工 程 的 全 貌 ( 主 窗 口 ) 你 会 发 现 教 员 的 图 标 改 变 了 : 现 在 图 标 出 现 了 条 纹 条 纹 的 出 现 意 味 着 类 文 件 还 没 有 被 重 新 编 译 过, 自 从 上 次 修 改 以 来 返 回 编 辑 器 - 11 -
旁 注 : 你 可 能 正 在 怀 疑 为 什 么 那 些 类 图 标 没 有 条 纹 在 工 程 第 一 次 被 打 开 的 时 候 这 是 因 为 那 些 people 工 程 中 发 布 的 类 都 是 已 经 被 编 译 过 的 通 常 情 况 下 随 BlueJ 一 起 发 布 的 工 程 是 没 有 被 编 译 过 的 所 以 做 好 看 到 大 多 数 类 都 有 条 纹 的 准 备, 如 果 你 是 第 一 次 打 开 工 程 的 话 在 编 辑 器 顶 端 的 工 具 条 包 含 一 些 经 常 使 用 的 功 能 按 钮, 其 中 一 个 是 编 译 你 可 以 使 用 这 个 按 钮 直 接 编 译 当 前 打 开 的 类 文 件 现 在 点 击 编 译 按 钮 如 果 你 没 有 犯 任 何 错 误, 那 么 在 编 辑 器 最 下 方 的 消 息 区 会 出 现 一 条 消 息 提 示 你 这 个 类 已 经 被 编 译 完 如 果 你 犯 了 一 个 错 误 导 致 语 法 出 错, 错 误 行 会 高 亮 显 示, 并 且 在 消 息 区 会 有 相 应 的 错 误 提 示 ( 假 设 你 第 一 次 进 行 编 译 是 没 有 出 错, 现 在 试 着 造 成 一 个 语 法 错 误 - 比 如 漏 写 分 号 - 然 后 再 次 编 译, 看 看 会 出 现 什 么 效 果?) 在 你 成 功 的 编 译 完 之 后, 关 闭 编 辑 器 旁 注 : 你 没 有 必 要 显 式 的 去 保 存 一 个 类 文 件 源 文 件 会 自 动 保 存 在 某 些 合 适 的 时 候 ( 比 如 当 编 辑 器 关 闭 时 或 者 类 文 件 被 编 译 时 ) 你 也 可 以 显 式 的 保 存 文 件 如 果 你 愿 意 ( 在 编 辑 器 的 工 具 栏 上 有 相 应 的 按 钮 ), 但 是 这 种 操 作 真 的 没 什 么 必 要, 除 非 你 的 系 统 相 当 不 稳 定, 随 时 都 有 崩 溃 的 危 险, 你 又 很 担 心 你 会 丢 失 你 的 工 作 成 果 工 程 窗 口 的 工 具 条 上 同 样 也 有 编 译 按 钮 这 个 编 译 操 作 会 编 译 整 个 工 程 ( 实 际 上 它 判 断 哪 些 类 需 要 重 新 编 译 然 后 按 照 正 确 的 顺 序 重 新 编 译 这 些 类 ) 你 可 以 试 着 修 改 2 个 或 多 个 类 ( 这 样 会 有 2 个 或 多 个 类 的 图 标 出 现 条 纹 ), 然 后 点 击 编 译 按 钮, 如 果 在 被 编 译 的 几 个 类 中 出 现 错 误, 编 辑 器 就 会 被 打 开, 错 误 位 置 和 错 误 信 息 会 显 示 出 来 你 可 能 注 意 到 了 对 象 槽 又 被 清 空 了 旧 的 对 象 会 被 删 除 每 次 实 现 改 变 之 后 小 结 : 要 编 译 一 个 类, 单 击 编 辑 器 里 编 译 按 钮 要 编 译 一 个 工 程, 单 击 工 程 窗 口 里 的 编 译 按 钮 3.5 使 用 编 译 器 错 误 帮 助 一 个 很 普 遍 的 现 象 是 : 初 学 的 学 生 对 理 解 编 译 器 错 误 总 是 有 很 大 的 困 难 我 们 试 着 提 供 了 一 些 帮 助 再 次 打 开 编 辑 器, 在 源 文 件 里 制 造 一 个 错 误, 然 后 编 译 一 个 错 误 信 息 会 出 现 在 编 辑 器 的 消 息 区 在 它 的 右 端 有 一 个 问 号, 你 可 以 点 击 它 来 得 到 更 多 的 关 于 这 个 类 型 错 误 的 信 息 ( 图 8) 图 8: 编 译 器 错 误 和 帮 助 按 钮 - 12 -
在 这 种 情 况 下, 并 不 是 所 有 的 错 误 信 息 都 有 相 应 的 帮 助 文 档 一 些 帮 助 文 档 仍 然 需 要 被 编 写 但 是 还 是 值 得 一 试 的 许 多 错 误 已 经 有 了 相 应 的 解 释 剩 下 的 那 些 错 误 信 息 将 会 被 编 写 并 包 含 在 BlueJ 将 来 的 版 本 中 小 结 : 要 得 到 编 译 器 错 误 的 帮 助, 单 击 错 误 信 息 旁 边 的 问 号 图 标 4 进 一 步 在 这 部 分 中, 我 们 将 浏 览 一 下 另 外 一 些 经 常 在 这 个 环 境 中 需 要 做 的 事 情 这 些 事 情 虽 然 不 是 必 需 的, 但 却 是 经 常 用 到 的 4.1 观 察 对 象 当 你 执 行 一 个 对 象 的 方 法 的 时 候, 你 可 能 会 注 意 到 查 看 对 象 这 项 操 作, 它 可 以 应 用 于 除 用 户 定 义 的 方 法 之 外 的 所 有 对 象 ( 图 5) 此 操 作 可 以 查 看 对 象 的 实 例 变 量 ( 域 ) 的 状 态 试 着 用 一 些 用 户 自 定 义 的 值 创 建 一 个 对 象 ( 例 如 : 以 代 参 数 的 构 造 函 数 构 造 的 一 个 Staff 对 象 的 实 例 ) 然 后 从 对 象 菜 单 中 选 择 查 看 对 象, 就 会 弹 出 一 个 对 话 框 显 示 该 对 象 的 域, 其 类 型 和 其 值 ( 图 9) 图 9: 查 看 对 话 框 查 看 对 象 对 于 快 速 检 查 那 些 改 变 对 象 状 态 的 操 作 是 否 被 正 确 的 执 行 了 是 很 有 用 的 因 此 查 看 对 象 功 能 是 一 个 简 单 的 调 试 工 具 在 Staff 这 个 例 子 中, 所 有 的 域 都 是 简 单 数 据 类 型 ( 要 么 是 非 对 象 类 型, 要 么 是 字 符 串 类 型 ) 这 些 类 型 的 值 可 以 直 接 显 示 出 来 这 样 你 可 以 及 时 查 看 构 造 方 法 是 否 正 确 的 完 成 了 任 务 - 13 -
在 更 复 杂 的 情 况 下, 域 的 值 可 能 是 对 于 用 户 自 定 义 对 象 的 引 用 我 们 将 用 另 一 个 工 程 来 演 示 这 样 的 例 子 : 打 开 工 程 people2, 它 同 样 包 含 在 标 准 的 BlueJ 版 本 People2 的 界 面 如 下 图 10 所 示 可 以 看 到, 第 二 个 例 子 除 了 有 前 面 看 到 的 那 些 类 之 外 还 有 一 个 Address 类 Person 类 的 一 个 域 就 是 用 户 自 定 义 的 类 型 Address 图 10:People2 工 程 窗 口 接 下 来 我 们 要 试 验 的 是 查 看 对 象 的 域 创 建 一 个 Staff 对 象 并 且 调 用 它 的 setaddress 方 法 ( 你 可 以 在 Person 子 菜 单 中 找 到 ) 输 入 一 个 地 址, 在 内 部,Staff 的 代 码 创 建 Address 类 的 一 个 对 象 并 且 储 存 在 address 域 里 现 在 查 看 Staff 对 象 查 看 结 果 的 对 话 框 如 图 11 所 示 此 时,Staff 类 内 部 的 域 包 含 address 如 你 所 见, 他 的 值 显 示 为 <object reference> 因 为 这 是 一 个 复 杂 的, 用 户 自 定 义 的 对 象, 他 的 值 不 能 直 接 被 显 示 在 列 表 中 为 了 进 一 步 检 查 address, 在 列 表 中 选 择 address 域 并 且 点 击 对 话 框 中 的 查 看 对 象 按 钮 ( 你 同 样 也 可 以 双 击 address 域 ) 这 时 就 会 弹 出 另 一 个 查 看 窗 口, 其 中 显 示 了 address 对 象 的 详 细 内 容 ( 图 12) - 14 -
图 11: 查 看 对 对 象 的 引 用 图 12: 查 看 内 部 对 象 如 果 选 中 的 域 是 公 共 的, 你 同 样 可 以 选 择 address 域 并 且 点 击 Get 按 钮 而 不 是 查 看 对 象 按 钮 此 操 作 将 选 中 的 对 象 放 入 对 象 槽 中 你 可 以 进 一 步 的 通 过 调 用 它 的 方 法 查 看 它 小 结 : 通 过 显 示 对 象 的 内 部 状 态, 对 象 查 看 可 以 作 为 一 些 简 单 的 调 试 手 段 4.2 组 合 组 合 指 的 是 将 对 象 作 为 参 数 传 递 给 其 他 对 象 的 能 力 让 我 们 试 验 一 个 例 子 创 建 一 - 15 -
个 Database 类 的 对 象 ( 你 会 注 意 到 Database 类 只 有 一 个 不 带 参 数 的 构 造 方 法, 所 以 构 造 一 个 对 象 只 有 这 样 一 种 方 式 ) Database 对 象 有 容 纳 一 个 persons 列 表 的 能 力 它 有 相 应 的 一 些 操 作 来 添 加 person 对 象 和 显 示 所 有 当 前 储 存 的 person ( 用 Database 来 调 用 它 实 际 上 有 点 夸 张 了!) 如 果 你 还 没 有 在 对 象 槽 中 建 立 一 个 Staff 或 者 Student 对 象, 首 先 创 建 它 们 中 的 一 个 接 下 来, 你 在 对 象 槽 中 同 时 需 要 一 个 Database 对 象 和 一 个 Staff 或 者 Student 对 象 现 在 调 用 Database 对 象 的 addperson 方 法 提 示 告 诉 你 需 要 一 个 Person 类 型 的 参 数 ( 记 住 :Person 类 是 一 个 抽 象 类, 因 此 没 有 任 何 对 象 是 直 接 的 Person 类 型 但 是, 作 为 自 类 型, Student 和 Staff 对 象 可 以 作 为 Person 对 象 的 替 代 因 此 在 需 要 Person 的 时 候 传 送 Staff 或 者 Student 是 合 法 的 ) 为 了 将 你 的 对 象 槽 中 的 对 象 作 为 一 个 参 数 传 送 给 你 调 用 的 方 法, 你 可 以 在 参 数 域 中 输 入 它 的 名 字 或 者 作 为 一 种 快 捷 方 式, 只 需 要 点 击 你 需 要 的 对 象, 这 将 把 它 的 名 字 输 入 到 方 法 调 用 对 话 框 中 去 点 击 确 定 之 后 调 用 就 生 效 了 因 为 这 个 方 法 没 有 任 何 的 返 回 值, 我 们 不 能 立 刻 看 到 结 果 你 可 以 调 用 Database 的 listall 方 法 查 看 此 操 作 确 实 被 执 行 了 listall 操 作 把 个 人 信 息 写 入 到 标 准 输 出 你 会 注 意 到 一 个 文 本 终 端 自 动 被 打 开 来 显 示 这 些 文 本 可 以 再 试 几 次, 输 入 更 多 的 person 到 database 中 小 结 : 通 过 点 击 一 个 对 象 的 图 标 可 以 把 一 个 对 象 作 为 参 数 传 给 一 个 方 法 调 用 - 16 -
5 创 建 一 个 新 工 程 这 一 章 将 带 你 快 速 浏 览 如 何 建 立 一 个 新 的 工 程 5.1 创 建 工 程 目 录 要 创 建 一 个 新 的 工 程, 从 菜 单 中 选 择 工 程 - 新 建 然 后 自 动 打 开 一 个 文 件 选 择 对 话 框 允 许 你 为 新 工 程 确 定 一 个 名 字 和 位 置 现 在 试 着 这 样 做, 你 可 以 为 你 的 工 程 选 择 任 何 名 字 当 你 选 择 确 定 之 后, 将 按 照 你 提 供 的 名 字 创 建 一 个 目 录, 并 且 主 窗 口 显 示 当 前 这 个 新 的, 空 的 工 程 小 结 : 想 创 建 一 个 工 程, 从 工 程 菜 单 中 选 择 新 建 5.2 创 建 类 现 在 你 可 以 通 过 在 工 程 工 具 条 上 点 击 新 建 类 按 钮 创 建 你 的 类 了 你 将 需 要 为 这 个 类 提 供 一 个 名 字 这 个 名 字 必 须 是 一 个 合 法 的 Java 标 识 符 你 同 样 可 以 一 下 四 种 不 同 类 中 选 择 :abstract,interface,applet 或 者 standard 这 种 选 择 将 决 定 你 的 类 将 以 何 种 初 始 的 代 码 框 架 创 建 你 也 可 以 通 过 编 辑 源 代 码 修 改 类 的 类 型 ( 例 如, 把 abstract 关 键 字 加 入 你 的 代 码 中 ) 在 创 建 一 个 类 之 后, 它 在 图 中 以 一 个 图 标 表 示 不 同 的 颜 色 标 识 不 同 类 型 的 类, 例 如, 蓝 色 表 示 一 般 的 类, 浅 蓝 色 表 示 抽 象 类, 绿 色 表 示 接 口 当 你 为 一 个 新 类 打 开 编 辑 器 的 时 候, 你 会 注 意 到 一 个 默 认 的 类 框 架 已 经 搭 好 了 这 将 为 你 写 入 代 码 带 来 方 便 默 认 框 架 代 码 是 没 有 语 法 错 误 的, 可 以 通 过 编 译 ( 但 是 它 没 有 什 么 功 能 ) 试 着 创 建 一 些 类 并 且 编 译 它 们 小 结 : 想 创 建 一 个 类, 点 击 新 建 类 按 钮 并 且 确 定 一 个 类 名 5.3 创 建 依 赖 关 系 类 框 图 以 箭 头 显 示 框 中 各 个 类 之 间 的 依 赖 关 系 继 承 关 系 ( extends 或 者 implements ) 被 显 示 为 双 箭 头 ; uses 关 系 被 显 示 为 单 箭 头 你 既 可 以 通 过 图 形 方 式 ( 直 接 在 框 图 中 ) 也 可 以 通 过 在 源 代 码 中 以 文 本 方 式 添 加 依 赖 关 系 如 果 你 以 图 形 方 式 添 加 了 一 个 箭 头, 源 文 件 也 同 时 自 动 的 更 新 了 ; 如 果 你 在 源 代 码 中 添 加 了 以 来 关 系, 框 图 也 会 自 动 更 新 想 以 图 形 方 式 添 加 一 个 箭 头, 点 击 想 要 的 箭 头 按 钮 ( 双 箭 头 是 extends 或 者 implements 关 系, 单 箭 头 是 uses 关 系 ) 添 加 一 个 继 承 箭 头 将 在 源 文 件 中 加 入 extends 或 者 implements 定 义 ( 依 赖 于 目 标 是 一 个 类 还 是 一 个 接 口 ) 添 加 一 个 uses 箭 头 不 会 直 接 改 变 源 代 码 ( 除 非 目 标 是 在 另 一 个 包 中 的 类 那 样 将 会 产 生 一 个 import 语 句, 但 是 在 我 们 的 例 子 中 是 看 不 见 的 ) 如 果 拥 有 一 个 uses 箭 头 指 向 另 一 个 类 而 在 源 代 码 中 实 际 上 没 有 用 到 这 个 类, 稍 后 将 会 产 生 一 个 警 告, 告 知 程 序 员 声 名 - 17 -
了 对 另 一 个 类 的 uses 关 系 但 是 这 个 类 却 没 有 用 到 用 文 本 方 式 添 加 箭 头 很 容 易 : 只 需 要 像 平 常 一 样 敲 入 代 码 即 可 当 代 码 被 保 存 的 时 候, 框 图 也 更 新 了 ( 记 住 : 关 闭 文 本 编 辑 器 将 自 动 保 存 文 本 ) 小 结 : 想 创 建 一 个 箭 头, 可 以 点 击 箭 头 按 钮 并 且 在 框 图 中 拖 动 箭 头, 或 者 只 在 编 辑 器 中 修 改 源 代 码 5.4 删 除 元 素 想 从 框 图 中 删 除 一 个 类, 选 中 这 个 类 并 且 从 编 辑 菜 单 中 选 择 删 除 类 你 同 样 可 以 从 这 个 类 的 弹 出 菜 单 中 选 择 删 除 想 删 除 一 个 箭 头, 从 菜 单 中 选 择 删 除 箭 头 并 且 选 中 你 想 删 除 的 箭 头 小 结 : 想 删 除 一 个 类, 从 它 的 弹 出 菜 单 中 选 择 删 除 功 能 想 删 除 一 个 箭 头, 从 编 辑 菜 单 中 选 择 删 除 并 且 点 击 想 要 删 除 的 箭 头 - 18 -
6 调 试 本 章 介 绍 了 BlueJ 提 供 的 调 试 功 能 的 最 重 要 的 几 个 方 面 在 与 计 算 机 老 师 的 交 谈 过 程 中, 我 们 经 常 能 听 到 这 样 的 评 论 : 如 果 在 教 学 的 第 一 年 就 能 使 用 一 个 调 试 器 将 是 一 件 很 美 好 的 事 情, 但 是 往 往 没 有 时 间 去 介 绍 它 学 生 不 得 不 重 复 修 改, 编 译, 然 后 执 行 这 样 的 调 试 过 程 ; 没 有 剩 下 多 少 时 间 可 以 用 来 介 绍 另 一 个 复 杂 的 工 具 ( 调 试 器 ) 所 以 我 们 决 定 把 这 个 调 试 器 做 的 尽 可 能 的 简 单 我 们 的 目 标 是 编 写 一 个 15 分 钟 内 就 能 学 会 使 用 的 调 试 器, 并 且 学 生 们 能 够 在 没 有 更 多 指 导 的 情 况 下 使 用 它 现 在 来 看 看 我 们 是 如 何 做 到 这 一 点 的 首 先 我 们 简 化 了 传 统 调 试 器 的 在 以 下 三 个 任 务 上 的 功 能 : 设 置 断 点 单 步 执 行 查 看 变 量 作 为 回 报, 这 三 项 任 务 每 一 项 都 变 得 很 简 单 我 们 现 在 就 试 着 演 示 每 一 项 任 务 开 始 前, 请 打 开 工 程 debugdemo, 在 安 装 目 录 下 的 example 目 录 下 可 以 找 到 这 个 工 程 包 含 了 一 些 专 门 为 演 示 调 试 器 功 能 的 类 他 们 不 关 心 其 他 的 一 些 事 情 6.1 设 置 断 点 设 置 断 点 允 许 你 在 源 代 码 的 某 一 行 打 断 程 序 的 执 行 当 程 序 的 执 行 被 打 断 后, 你 可 以 查 看 的 你 的 工 程 的 状 态 它 通 常 可 以 帮 助 你 理 解 你 的 源 代 码 到 底 做 了 什 么 在 编 辑 器 文 本 区 的 左 边 是 断 点 区 ( 图 13) 你 可 以 通 过 在 断 点 区 单 击 来 设 置 断 点 一 个 小 的 停 止 图 标 会 出 现 来 标 明 断 点 现 在 试 一 下 打 开 类 Demo, 找 到 方 法 loop, 在 for 循 环 内 部 设 置 一 个 断 点, 停 止 图 标 应 该 会 出 现 在 你 的 编 辑 器 窗 口 里 图 13: 一 个 断 点 当 执 行 到 断 点 所 在 的 行 时, 执 行 过 程 就 会 被 打 断 让 我 们 试 一 下 创 建 一 个 Demo 对 象 并 且 用 参 数 (10) 调 用 loop 方 法 只 要 执 行 到 断 点 所 在 行, 编 辑 器 窗 口 就 会 自 动 跳 出, 显 示 当 前 行 的 代 码 同 时 调 试 器 窗 口 也 会 出 现, 它 应 该 看 起 来 如 图 14 所 示 - 19 -
图 14: 调 试 窗 口 高 亮 显 示 的 行 是 下 一 步 要 执 行 的 行 ( 执 行 过 程 在 改 行 还 没 被 执 行 前 被 打 断 ) 小 结 : 要 设 置 断 点, 单 击 编 辑 器 左 边 的 断 点 区 6.2 单 步 执 行 现 在 我 们 已 经 打 断 了 程 序 的 执 行 ( 这 是 我 们 相 信, 这 个 方 法 确 实 被 执 行 了, 并 且 断 点 的 代 码 也 确 实 被 执 行 到 了 ), 我 们 能 够 单 步 执 行 去 查 看 这 个 程 序 是 如 何 向 下 执 行 的 要 做 到 这 一 点, 不 断 的 点 击 调 试 窗 口 里 的 单 步 按 钮 你 应 该 可 以 看 到 编 辑 器 里 的 行 号 不 断 的 变 化 ( 高 亮 显 示 的 行 随 着 将 要 被 执 行 的 行 而 移 动 ) 每 次 你 点 击 单 步, 一 行 会 被 执 行 并 且 又 一 次 停 止 执 行 同 时 请 注 意 在 调 试 窗 口 里 显 示 的 变 量 值 也 在 不 停 的 改 变 ( 比 如 sum ) 所 以 你 可 以 一 步 一 步 的 执 行 来 观 察 发 生 了 哪 些 变 化 一 旦 你 厌 倦 了 单 步 执 行, 你 可 以 再 一 次 点 击 断 点 图 标 来 删 除 它, 然 后 点 击 调 试 器 里 的 继 续 图 标 来 重 新 启 动 执 行 过 程, 按 正 常 的 执 行 顺 序 执 行 让 我 们 用 另 一 个 方 法 来 试 一 下 在 Demo 类 cartest() 方 法 里 如 下 一 行 设 置 一 个 断 点 : places = mycar.seats(); 调 用 这 个 方 法 当 该 行 被 执 行 到 时, 正 要 执 行 Car 类 的 seats() 方 法 单 击 单 步 会 执 行 整 个 行, 而 不 会 进 入 seats() 方 法 这 次 让 我 们 试 试 单 步 进 入 如 果 你 使 用 单 步 进 入, 你 就 会 进 入 到 一 个 方 法 的 内 部, 单 步 执 行 该 方 法 ( 就 跟 单 步 一 样 ) 你 能 够 很 高 兴 的 单 步 跟 踪 这 个 方 法 知 道 该 方 法 结 束 返 回 调 用 它 的 函 数, 注 意 调 试 器 显 示 的 变 化 单 步 和 单 步 进 入 在 当 前 行 没 有 的 用 方 法 的 情 况 下 是 一 样 的 小 结 : 要 单 步 调 试, 使 用 调 试 器 的 单 步 或 单 步 进 入 按 钮 - 20 -
6.3 查 看 变 量 当 你 调 试 调 试 你 的 代 码 的 时 候, 能 够 了 解 你 的 对 象 的 当 前 的 状 态 是 很 重 要 的 ( 局 部 变 量 和 成 员 实 例 变 量 ) 要 做 到 这 一 点 是 很 简 单 的 大 部 分 你 已 经 看 到 过 了 你 不 需 要 特 别 的 命 令 来 查 看 变 量 ; 当 前 对 象 的 成 员 变 量 和 当 前 方 法 的 局 部 变 量 都 会 被 自 动 显 示 和 更 新 你 可 以 选 择 调 用 栈 里 的 方 法 来 查 看 其 他 当 前 活 动 的 对 象 或 方 法 的 变 量 试 一 下, 比 如, 在 cartest() 方 法 里 再 一 次 设 置 断 点 在 调 试 器 窗 口 的 左 端, 你 能 看 见 调 用 栈, 当 前 的 显 示 是 Car.seats Demo.carTest 这 表 示 Car.seats 被 Demo.carTest 调 用 了, 你 可 以 选 择 这 个 列 表 中 的 Demo.carTest 来 查 看 源 代 码 和 当 前 各 个 变 量 的 值 如 果 你 单 步 运 行 包 含 new Car( ) 的 行 你 可 以 看 到 局 部 变 量 mycar 的 值 显 示 在 <Object Reference> 里 所 有 Object 子 类 类 型 变 量 的 值 ( 除 了 String) 是 通 过 这 个 方 法 显 示 的 你 可 以 通 过 双 击 这 些 变 量 来 查 看 它 们 的 值 这 样 做 的 话 会 弹 出 一 个 和 前 面 描 述 一 致 的 对 象 查 看 窗 口 (4.1 节 ), 在 这 里 查 看 对 象 状 态 和 在 对 象 槽 里 查 看 是 一 样 的 小 结 : 查 看 变 量 是 很 方 便 的 它 们 被 自 动 显 示 在 调 试 器 窗 口 里 6.4 暂 停 和 中 止 调 试 有 的 时 候 一 个 程 序 运 行 了 很 长 的 时 间 你 开 始 怀 疑 是 不 是 出 了 问 题 也 许 存 在 一 个 无 限 循 环, 也 许 长 时 间 运 行 是 正 常 的 好, 我 们 可 以 检 查 一 下 在 Demo 类 里 调 用 longloop(), 这 个 方 法 运 行 很 长 时 间 现 在 我 们 想 知 道 程 序 运 行 的 怎 么 样 了 打 开 调 试 器 窗 口, 如 果 它 还 没 有 被 打 开 的 话 ( 顺 便 说 一 下, 在 执 行 过 程 中 点 击 代 表 虚 拟 机 正 在 运 行 的 旋 转 图 标 是 打 开 调 试 器 的 一 个 快 捷 方 式 ) 现 在 点 击 暂 停 按 钮 程 序 的 执 行 被 停 止 了 就 跟 我 们 设 置 了 一 个 断 点 一 样 现 在 你 就 可 以 单 步 执 行 一 段, 观 察 对 象, 看 看 是 不 是 一 切 正 常 它 只 是 需 要 更 多 的 时 间 来 完 成 运 行 你 可 以 继 续 暂 停 几 次 来 看 看 它 计 数 有 多 快 如 果 你 真 的 不 想 让 它 再 继 续 执 行 下 去 ( 比 如, 你 发 现 你 的 程 序 已 经 陷 入 了 死 循 环 ), 你 可 以 点 击 中 止 来 中 止 程 序 的 执 行 中 止 操 作 不 应 该 被 频 繁 使 用 这 样 会 使 用 那 些 实 现 的 很 完 美 的 类 进 入 不 一 致 的 状 态 所 以 建 议 只 把 这 项 功 能 作 为 一 项 紧 急 措 施 来 使 用 小 结 : 暂 停 和 中 止 可 以 用 来 暂 时 或 永 久 打 断 程 序 的 执 行 - 21 -
7 创 建 独 立 的 应 用 程 序 BlueJ 可 以 创 建 可 执 行 的 jar 文 件 可 执 行 jar 文 件 在 某 些 系 统 上 可 以 通 过 双 击 来 执 行 ( 比 如 windows) 或 者 通 过 使 用 命 令 java jar <file-name>.jar(unix 或 者 Dos 命 令 行 ) 我 们 通 过 例 子 程 序 hello 来 演 示 这 一 点, 打 开 它 ( 在 example 目 录 下 ) 确 定 这 个 工 程 被 编 译 完 了 从 工 程 菜 单 选 择 导 出 功 能 一 个 对 话 框 会 出 现, 询 问 你 保 存 的 格 式, 选 择 jar 文 件 来 创 建 一 个 可 执 行 的 jar 文 件 为 了 是 这 个 jar 文 件 可 执 行, 你 还 必 须 指 定 一 个 主 类 这 个 类 必 须 有 一 个 有 效 定 义 的 main () 方 法 ( 使 用 定 义 public static void main(string args[])) 在 我 们 的 例 子 里 选 择 主 类 是 很 简 单 的 : 因 为 只 有 一 个 类 从 弹 出 菜 单 里 选 择 Hello 如 果 你 有 其 他 的 工 程, 选 择 包 含 你 希 望 被 执 行 的 main() 方 法 的 类 作 为 主 类 通 常 情 况 下, 你 不 需 要 把 源 文 件 包 含 到 可 执 行 文 件 中 但 如 果 你 愿 意, 你 也 可 以 同 时 发 布 你 的 源 代 码 点 击 继 续, 接 下 来 你 会 看 见 一 个 文 件 选 择 对 话 框 让 你 指 定 要 生 成 的 jar 文 件 的 文 件 名 输 入 Hello 然 后 点 击 确 定 jar 文 件 的 创 建 就 完 成 了 你 能 够 双 击 jar 文 件 除 非 你 的 应 用 程 序 是 图 形 界 面 的 我 们 的 例 子 使 用 文 本 输 入 输 出, 所 以 我 们 不 得 不 从 一 个 字 符 终 端 启 动 它 现 在 让 我 们 试 着 运 行 它 打 开 一 个 终 端 或 者 Dos 窗 口 然 后 进 入 你 保 存 jar 文 件 的 目 录 ( 你 应 该 能 够 看 见 一 个 叫 Hello.jar 的 文 件 ) 假 设 你 的 系 统 上 已 经 正 确 的 安 装 了 Java, 这 样 的 话 你 就 可 以 使 用 以 下 的 命 令 java jar hello.jar 来 执 行 这 个 文 件 小 结 : 要 创 建 一 个 独 立 的 应 用 程 序, 使 用 工 程 - 导 出 - 22 -
8 创 建 Applet 8.1 运 行 一 个 Applet BlueJ 允 许 像 应 用 程 序 一 样 创 建 和 执 行 Applets 在 发 布 版 本 的 示 例 目 录 中 有 一 些 Applets 首 先, 我 们 要 试 着 运 行 其 中 一 个 从 示 例 中 打 开 appletclock 工 程 你 会 看 到 这 个 项 目 中 只 有 一 个 名 为 Clock 的 类 类 的 图 标 已 经 被 ( 用 WWW 字 样 ) 标 明 为 applet 从 类 的 弹 出 菜 单 中 选 择 运 行 Applet 命 令 此 时 会 弹 出 一 个 对 话 框, 你 可 以 输 入 一 些 选 项 ( 图 15) 图 15: 运 行 Applet 对 话 框 你 会 发 现 你 可 以 选 择 是 在 一 个 浏 览 器 中 还 是 在 一 个 applet 查 看 器 中 运 行 一 个 applet( 或 者 仅 仅 创 建 一 个 Web 页 面 而 不 运 行 它 ) 保 留 默 认 设 置 并 且 点 击 确 定 过 一 会 儿 便 会 弹 出 一 个 applet 查 看 器 显 示 出 这 个 时 钟 applet Applet 查 看 器 与 你 的 JDK 安 装 在 一 起, 因 此 保 证 了 它 总 是 和 你 的 Java 编 译 器 是 同 一 个 版 本 的 它 通 常 会 比 浏 览 器 产 生 更 少 的 错 误 你 的 浏 览 器 可 能 运 行 不 同 版 本 的 Java 并 且 可 能 产 生 错 误, 这 依 赖 与 你 所 使 用 的 浏 览 器 版 本 但 是, 现 在 大 部 分 版 本 是 工 作 正 常 的 在 Microsoft Windows 操 作 系 统 中,BlueJ 使 用 你 的 默 认 浏 览 器 在 Unix 操 作 系 统 中, 浏 览 器 需 要 在 BlueJ 的 设 置 中 定 义 小 结 : 想 要 运 行 一 个 applet, 从 applet 的 弹 出 菜 单 中 选 择 运 行 Applet - 23 -
8.2 创 建 一 个 Applet 知 道 怎 么 运 行 一 个 applet 之 后, 我 们 想 要 创 建 一 个 自 己 的 applet 创 建 一 个 新 的 类, 在 类 类 型 一 栏 中 选 择 Applet( 你 可 以 在 新 建 类 的 对 话 框 中 选 择 类 型 ) 编 译, 然 后 运 行 这 个 applet, 就 这 样 这 不 是 很 方 便 的 吗? 跟 其 他 类 一 样,Applet 创 建 的 时 候 就 已 经 自 动 构 造 了 一 个 由 一 些 合 法 代 码 组 成 的 框 架 这 些 代 码 用 两 行 文 字 构 成 了 一 个 简 单 的 applet 现 在 你 可 以 打 开 编 辑 器 并 且 编 辑 你 的 applet, 向 其 中 插 入 你 自 己 的 代 码 其 中 你 可 以 看 到 所 有 一 般 的 applet 方 法, 每 一 个 方 法 都 有 一 段 说 明 其 目 的 的 注 释 所 有 的 样 本 代 码 都 在 paint 方 法 中 小 结 : 想 创 建 一 个 applet, 点 击 新 建 类 按 钮 并 且 在 类 的 类 型 栏 目 中 选 择 Applet 8.3 测 试 一 个 Applet 某 些 情 况 下 在 对 象 槽 中 创 建 一 个 applet 对 象 是 很 有 用 的 ( 就 如 普 通 类 一 样 ) 你 可 以 很 容 易 的 做 到 这 一 点 applet 的 构 造 函 数 就 在 它 的 弹 出 菜 单 之 中 你 不 能 在 对 象 槽 中 运 行 整 个 applet, 但 是 你 可 以 调 用 一 些 方 法 当 你 想 要 测 试 你 在 applet 中 已 经 实 现 的 某 一 个 方 法 的 时 候, 这 是 很 有 用 的 - 24 -
9 其 它 操 作 9.1 在 BlueJ 中 打 开 非 BlueJ 的 软 件 包 BlueJ 允 许 你 打 开 那 些 已 经 存 在 的 但 并 非 用 BlueJ 生 成 的 软 件 包 你 只 需 要 从 菜 单 中 选 择 工 程 打 开 非 BlueJ 即 可 选 择 包 含 了 Java 源 文 件 的 目 录, 然 后 点 击 在 BlueJ 中 打 开 按 钮 系 统 将 会 要 求 你 确 认 是 否 要 打 开 这 个 目 录 小 结 : 非 BlueJ 软 件 包 可 以 用 工 程 : 打 开 非 BlueJ 命 令 打 开 9.2 在 工 程 中 加 入 已 有 的 类 文 件 你 经 常 想 要 在 BlueJ 的 工 程 中 使 用 一 些 从 其 他 地 方 得 到 的 类 例 如, 老 师 可 能 给 学 生 一 个 Java 类, 这 个 类 要 在 某 个 工 程 中 用 到 你 只 需 要 在 菜 单 中 选 择 编 辑 从 文 件 添 加 一 个 类 就 可 以 轻 松 的 将 以 一 个 已 经 存 在 的 类 合 并 到 你 的 工 程 中 去 这 样 BlueJ 允 许 你 导 如 一 个 选 中 的 Java 源 文 件 ( 文 件 名 以.java 结 尾 ) 当 某 个 类 成 功 的 被 导 入 一 个 工 程 以 后, 它 就 被 复 制 并 且 储 存 到 当 前 的 工 程 目 录 中 这 跟 你 创 建 一 个 类 并 且 写 入 所 有 的 代 码 效 果 是 完 全 一 样 的 另 一 种 可 供 选 择 的 方 法 是, 直 接 从 外 部 添 加 一 个 类 的 源 文 件 到 你 的 工 程 所 在 目 录 中 下 次 启 动 BlueJ 的 时 候, 这 类 就 会 被 包 含 在 工 程 框 图 中 小 结 : 可 以 使 用 从 文 件 添 加 类 命 令 把 需 要 的 类 从 外 部 拷 贝 到 工 程 中 来 9.3 调 用 main 函 数 和 其 他 静 态 成 员 方 法 从 examples 目 录 中 打 开 hello 工 程 工 程 中 唯 一 的 一 个 类 ( 类 Hello) 定 义 了 一 个 标 准 的 main 方 法 鼠 标 右 键 点 击 这 个 类, 你 可 以 看 到 类 的 菜 单 中 不 仅 有 这 个 类 的 构 造 方 法, 而 且 还 有 一 个 静 态 的 main 方 法 你 可 以 直 接 从 菜 单 中 调 用 main 方 法 ( 并 不 需 要 像 我 们 期 待 的 那 样 为 静 态 方 法 首 先 创 建 一 个 对 象 ) 所 有 的 静 态 方 法 都 可 以 这 样 调 用 标 准 的 main 方 法 需 要 一 个 字 符 串 数 组 参 数 你 可 以 使 用 标 准 的 Java 数 组 构 造 语 法 传 递 一 个 字 符 串 数 组 例 如, 你 可 以 把 { one, two, three } 传 递 给 方 法 试 一 试! 旁 注 : 在 标 准 Java 中, 数 组 构 造 方 法 不 能 作 为 方 法 调 用 的 实 际 参 数 它 只 能 用 来 初 始 化 数 组 但 在 BlueJ 中, 为 了 支 持 对 标 准 main 方 法 的 交 互 式 调 用, 我 们 允 许 把 数 组 的 构 造 方 法 作 为 参 数 传 递 小 结 : 静 态 方 法 可 以 从 类 的 弹 出 菜 单 中 直 接 调 用 - 25 -
9.4 使 用 类 库 在 你 写 Java 程 序 的 时 候, 你 经 常 需 要 查 看 Java 的 标 准 库 你 可 以 通 过 从 菜 单 中 选 择 帮 助 Java 标 准 类 在 web 浏 览 器 来 打 开 JDK API 文 档 ( 如 果 你 是 在 线 的 ) JDK 的 帮 助 文 档 也 可 以 在 本 地 安 装 和 使 用 ( 未 联 机 方 式 ) 在 BlueJ 的 参 考 手 册 中 有 详 细 说 明 小 结 : 可 以 选 择 帮 助 Java 标 准 库 来 查 看 Java 的 标 准 类 API - 26 -
10 小 结 基 础 知 识 : 1. 要 创 建 一 个 对 象, 从 类 菜 单 中 选 择 一 个 构 造 函 数 2. 要 执 行 一 个 方 法, 从 对 象 菜 单 中 选 择 它 3. 要 编 辑 类 的 源 码, 双 击 类 图 标 4. 要 编 译 一 个 类, 单 击 编 辑 器 里 编 译 按 钮 要 编 译 一 个 工 程, 单 击 工 程 窗 口 里 的 编 译 按 钮 5. 要 得 到 编 译 器 错 误 的 帮 助, 单 击 错 误 信 息 旁 边 的 问 号 图 标 进 一 步 : 6. 通 过 显 示 对 象 的 内 部 状 态, 对 象 查 看 可 以 作 为 一 些 简 单 的 调 试 手 段 7. 通 过 点 击 一 个 对 象 的 图 标 可 以 把 一 个 对 象 作 为 参 数 传 给 一 个 方 法 调 用 创 建 一 个 新 工 程 : 8. 想 创 建 一 个 工 程, 从 工 程 菜 单 中 选 择 新 建 9. 想 创 建 一 个 类, 点 击 新 建 类 按 钮 并 且 确 定 一 个 类 名 10. 想 创 建 一 个 箭 头, 可 以 点 击 箭 头 按 钮 并 且 在 框 图 中 拖 动 箭 头, 或 者 只 在 编 辑 器 中 修 改 源 代 码 11. 想 删 除 一 个 类, 从 它 的 弹 出 菜 单 中 选 择 删 除 功 能 12. 想 删 除 一 个 箭 头, 从 编 辑 菜 单 中 选 择 删 除 并 且 点 击 想 要 删 除 的 箭 头 调 试 : 13. 断 点, 单 击 编 辑 器 左 边 的 断 点 区 14. 要 单 步 调 试, 使 用 调 试 器 的 单 步 或 单 步 进 入 按 钮 15. 查 看 变 量 是 很 方 便 的 -- 它 们 被 自 动 显 示 在 调 试 器 窗 口 里 16. 暂 停 和 中 止 可 以 用 来 暂 时 或 永 久 打 断 程 序 的 执 行 创 建 独 立 的 应 用 程 序 : 17. 要 创 建 一 个 独 立 的 应 用 程 序, 使 用 工 程 - 导 出 创 建 小 应 用 程 序 18 运 行 小 应 用 程 序, 从 小 应 用 程 序 的 弹 出 菜 单 中 选 择 运 行 applet 功 能 19 创 建 小 应 用 程 序, 点 击 新 建 类 按 钮, 并 指 定 文 件 名 及 类 型 为 applet 其 它 操 作 20 打 开 非 BlueJ 包, 用 主 菜 单 中 的 工 程 打 开 非 BlueJ 文 件 21 类 文 件 可 从 工 程 外 被 拷 贝 到 工 程 中, 用 编 辑 从 文 件 添 加 类 命 令 22 静 态 方 法 可 用 弹 出 菜 单 调 用 23 可 通 过 菜 单 中 的 帮 助 Java 类 库, 打 开 浏 览 器 查 看 Java API 文 档 - 27 -
- 28 -