Java语言入门 本文章下载于Txt66.com 第 一 章 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 动 态 Java的 动 态 特 性 是 其 面 向 对 象 设 计 方 法 的 发 展。 它 允 许 程 序 动 态 地 装 入 运 行 过 程 中 所 需 要 的 类, 这 是C++语 言 进 行 面 向 对 象 程 序 设 计 所 无 法 实 现 的。 在C++程 序 设 计 过 程 中, 每 当 在 类 中 增 加 一 个 实 例 变 量 或 一 种 成 员 函 数 后, 引 用 该 类 的 所 有 子 类 都 必 须 重 新 编 译, 否 则 将 导 致 程 序 崩 溃。Java从 如 下 几 方 面 采 取 措施来 解 决 这 个 问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
。Java编 译 器 不 是 将 对 实 例 变 量 和 成 员 函 数 的 引 用 编 译 为 数 值 引 用, 而 是 将 符 号 引 用 信 息 在 字 节 码 中 保 存 下 传 递 给 解 释 器, 再 由 解 释 器 在 完 成 动 态 连 接 类 后, 将 符 号 引 用 信 息 转 换 为 数 值 偏 移 量。 这 样, 一 个 在 存 储 器 生 成 的 对 象 不 在 编 译 过 程 中 决 定, 而 是 延 迟 到 运 行 时 由 解 释 器 确 定 的。 这 样, 对 类 中 的 变 量 和 方 法 进 行 更 新 时 就 不 至 于 影 响 现 存 的 代 码。 解 释 执 行 字 节 码 时, 这 种 符 号 信 息 的 查 找 和 转 换 过 程 仅 在 一 个 新 的 名 字 出 现 时 才 进 行 一 次, 随 后 代 码 便 可 以 全 速 执 行。 在 运 行 时 确 定 引 用 的 好 处 是 可 以 使 用 已 被 更 新 的 类, 而 不 必 担 心 会 影 响 原 有 的 代 码。 如 果 程 序 连 接 了 网 络 中 另 一 系 统 中 的 某 一 类, 该 类 的 所 有 者 也 可 以 自 由 地 对 该 类 进 行 更 新, 而 不 会 使 任 何 引 用 该 类 的 程 序 崩 溃。 Java还 简 化 了 使 用 一 个 升 级 的 或 全 新 的 协 议 的 方 法。 如 果 你 的 系 统 运 行Java程 序 时 遇 到 了 不 知 怎 样 处 理 的 程 序, 没 关 系,Java能 自 动 下 载 你 所 需 要 的 功 能 程 序。 1.3 与C和C++语 言 的 异 同 Java提 供 了 一 个 功 能 强 大 语 言 的 所 有 功 能, 但 几 乎 没 有 一 点 含 混 特 征。C++安 全 性 不 好, 但C和C++还 是 被 大 家 所 接 受, 所 以Java设 计 成C++形 式, 让 大 家 很 容 易 学 习。Java去 掉 了C++语 言 的 许 多 功 能, 让Java的 语 言 功 能 很 精 炼, 并 增 加 了 一些很 有 用 的 功 能, Java去 掉 了 以 下 几 个C和C++功 能 和 特 征: 指 针 运 算 结 构 typedefs #define 需 要 释 放 内 存 全 局 变 量 的 定 义 这个功 能 都 是 很 容 易 引 起 错 误 的 地 方。 1.4 Java的 应 用 简 介 1.4.1 Web浏 览 Web浏 览 是 现 在 国 际 网 甚 至 局 域 网 的 主 要 使 用 方 式。 文 档 能 很 容 易 地 显 示 文 本 和 各 种 图 片, 他 还 能 提 供 超 文 本 链 接。 这 些 浏 览 器 调 用HTML语 言 写 的 文 档,HTML/WWW浏 览 器 技 术 只 限 于 文 本 和 图 象。 如 果 你 想 播 放 一 种 声 音 或 运 行 一 个 演 示 程 序, 你 不 得 不 下 载 那 个 文 件 并 用 你 本 机 上 的 能 理 解 和 运 行 那 个 文 件 格 式 的 程 序 来 播 放 它。 Java程 序 和 它 的 浏 览 器HotJava, 提 供 了 可 让 你 的 浏 览 器 运 行 程 序 的 方 法。 你 能 从 你 的 浏 览 器 里 直 接 播 放 声 音。 你 还 能 播 放 页 面 里 的 动 画。Java还 能 告 诉 你 的 浏 览 器 怎 样 处 理 新 的 类 型 文 件。 当 我 们 能 在2400 baud线 上 传 输 视 频 图 象 时,HotJava将 能 显 示 这 些 视 频。 1.4.2 网 络 应 用 系 统 Java是 一 种 与 平 台 无 关 的 语 言, 因 此 用Java开 发 的 网 络 应 用 系 统 可 以 在 各 种 平 台 上 运 行, 大 大 增 加 了 开 发 效 率, 减 少 重 复 劳 动。 而 且,Java集 成 的 网 络 功 能 分 有 利 于 开 发 网 络 应 用 系 统。 本 章 小 结: 1.Java的 产 生 与 流 行 是 当 今internet发 展 的 客 观 要 求。 2.java是 一 门 各 方 面 性 能 都 很 好 的 编 程 语 言, 它 的 基 本 特 点 是 简 单、 面 象 对 象、 分 布 式、 解 释 的、健 壮 的、 安 全 的、 结 构 中 立 的、 可 移 植 的、 性 能 很 优 异 的、 多 线 程 的、 动 态 的。分 适 合 在internet环 境 上 开 发 应 用 系 统。 3.java可 以 制 作 大 部 分 网 络 应 用 程 序 系 统, 而 且 与 当 今 流 行 的WWW浏 览 器 结 合 得 很 好。 第 二 章 Java程 序 开 发 与 运 行 环 境 2.1 JDK环 境 Java不 仅 提供了 一 个 丰 富 的 语 言 和 运 行 环 境, 而 且 还 提供了 一 个 免 费 的Java开 发 工 具 集(Java Developers Kits, 简 称JDK)。 编 程 人 员 和 最 终 用 户 可 以 利 用 这 些 工 具 来 开 发java程 序 或 调 用Java 内 容。JDK包 括 以 下 工 具: javac Java语 言 编 译 器, 输 出 结 果 为Java字 节 码 java Java字 节 码 解 释 器 javap Disassembeler: Java字 节 码 分 解 程 序, 本 程 序 返 回Java程 序 的 成 员 变 量 及 方 法 等 信 息。 javaprof 资 源 分 析 工 具, 用 于 分 析Java程 序 在 运 行 过 程 中 调 用 了 哪 些 资 源, 包 括 类 和 方 法 的 调 用 次 数 和 时 间, 以 及 各 数 据 类 型 的 内 存 使 用 情 况 等。 javah C代 码 处 理 工 具, 用 于 从Java类 调 用C++代 码 java Applet Viewer 小 应 用 程 序 浏 览 工 具, 用 于 测 试 并 运 行Java小 应 用 程 序 java Debugger API Java调 试 工 具API Prototype Debugger Java调 试 工 具 原 型 Java开 发 环 境 还 包 括Java类 库(包 括I/O类 库、 用 户 界 面 类 库、 网 络 类 库 等)和HotJava WWW 浏 览 器。 其 中,HotJava浏 览 器 提 供 了 在WWW环 境 下 运 行Java代 码 的 一 个 运 行 系 统, 而 且 还 为WWW开 发 人 员 提 供 了 一 个Java开 发 框 架。Java解 释 器 是 面 向 Java程 序 的 一 个 独 立 运 行 系 统, 它 可 以 一 种 稳 定、 高 性 能 方 式 运 行 那 些 独 立 于 平 台 的Java字 节 码,Java编 译 器 则 用 于 生 成 这 些 字 节 码。 2.1.1 Java程 序 的 编 译 Java程 序 的 编 译 程 序 是javac.exe。javac命 令 将Java程 序 编 译 成 字 节 码, 然 后 你 可 用java解 释 器java命 令 来 解 释 执 行 这 些Java字 节 码。Java程 序 源 码 必 须 存 放 在 后 缀 为.java的 文 件 里。Java 程 序 里 的 每 一 个 类,javac都 将 生 成 与 类 相 同 名 称 但 后 缀 为.class文 件。 编 译 器 把.class文 件 放 在.java文 件 的 同 一 个 目 录 里, 除 非 你 用 了-d选 项。 当 你 引 用 到 某些自 己 定 义 的 类 时, 必 须 指 明 它 们 的 存 放 目 录, 这 就 需 要 利 用 环 境 变 量 参 数 CLASSPATH。 环 境 变 量CLASSPATH是 由 一 些 被 分 号 隔 开 的 路 径 名 组 成。 如 果 传 递 给javac编 译 器 的 源 文 件 里 引 用 到 的 类 定 义 在 本 文 件 和 传 递 的 其 它 文 件 中 找 不 到, 则 编 译 器 会 按 CLASSPATH定 义 的 路 径 来 搜 索。 例 如: CLASSPATH = .;C:\\java\\classes 则 编 译 器 先 搜 索 当 前 目 录, 如 果 没 搜 索 到, 则 继 续 搜 索C:\\java\\classes目 录。 注 意, 系 统 总 是 将 系 统 类 的 目 录 缺 省 地 加 在CLASSPATH后 面, 除 非 你 用 -classpath选 项 来 编 译。 javac_g 是 一 个 用 于 调 试 的 未 优 化 的 编 译 器, 功 能 与 用 法 和javac一 样。 javac的 用 法 如 下: javac [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java... 以 下 是 每 个 选 项 的 解 释。 选 项 解 释: -classpath path 定 义javac搜 索 类 的 路 径。 它 将 覆 盖 缺 省 的CLASSPATH环 境 变 量 的 设 置。 路 径 是 由 一 些 由 逗 号 隔 开 的 路 径 名 组 成, 一 般 格 式 如 下: .; 例 如: .;C:\\java\\doc\\classes;C:\\tools\\java\\classes 表 示 编 译 器 遇 到 一 个 新 类, 它 先 在 本 文 件 中 查 找 它 的 定 义, 如 果 没 有, 则 在 本 文 件 所 处 目 录 下 其 它 文 件 中 查 找 它 的 定 义, 如 果 还 没 有, 则 继 续 搜 索C:\\java\\doc\\classes目 录 中 的 所 有 文 件, 以 此 类 推。 -d directory 指 明 类 层 次 的 根 目 录, 格 式 如 下:javac -d MyProgram.java 这 样 将MyProgram.java程 序 里 的 生 产 的.class文 件 存 放 在my_dir目 录 里. -g 带 调 试 信 息 编 译, 调 试 信 息 包 括 行 号 与 使 用java调 试 工 具 时 用 到 的 局 部 变 量 信 息。 如 果 编 译 没 有 加 上-O优 化 选 项, 只 包 含 行 号 信 息。 -nowarn 关 闭 警 告 信 息, 编 译 器 将 不 显 示 任 何 警 告 信 息。 -O 优 化 编 译static,final,private函 数, 注 意 你 的 类 文 件 可 能 更 大。 -verbose 让 编 译 器 与 解 释 器 显 示 被 编 译 的 源 文 件 名 和 被 加 载 的 类 名。 环 境 变 量 CLASSPATH 用 来 提?copy;给 系 统 搜 索 用 户 定 义 的 类 的 缺 省 路 径。 各 路 径 由 分 号 隔 开, 例 如:.;C:\\java\\doc\\classes;C:\\tools\\java\\classes 表 示 编 译 器 遇 到 一 个 新 类, 它 先 在 本 文 件 中 查 找 它 的 定 义, 如 果 没 有, 则 在 本 文 件 所 处 目 录 下 其 它 文 件 中 查 找 它 的 定 义, 如 果 还 没 有, 则 继 续 搜 索C:\\java\\doc\\classes目 录 中 的 所 有 文 件, 以 此 类 推。 2.1.2 Java程 序 的 调 试 使 用java调 试 器 jdb导 游 在 早 期 前Betal版 的Java调 试 器jdb是 命 令 行 形 式 的, 如 用Sun公 司 的dbx调 试 器。 用jdb来 调 试Java应 用 程 序, 在 调 试 前, 要 确 证 你 的 应 用 程 序 是 带 标 志 -g编 译 的。 例 如: javac -g HelloWorld.java help命 令 将 显 示jdb 里 的 可 用 命 令 列 表。 >help <命 令 列 表> threads [threadgroup]--列 出 线 程 thread - - 设 置 缺 省 线 程 Suspend [threads id(s)]- - 将 线 程 挂 起 resume [thread id(s)]- - 重 新 启 动 线 程 where [id] |a1|- - 打 印 线 程 的 堆 栈 threadgroups--列 出 线 程 组 号 threadgroup -- 设 置 当 前 线 程 组 print [id(s)]- - 打 印 对 象 或 域 dump [id(s)]- - 打 印 所 有 对 象 信 息 locals- - 打 印 当 前 堆 栈 所 有 局 部 变 量 classes- - 列 出 当 前 所 知 的 类 methods - - 列 出 一 个 类 的 成 员 函 数 stop in .- - 在 一 个 成 员 函 数 里 设 置 断 点 stop at :- - 在 一 行 里 设 置 断 点 up [n frames]- - 在 线 程 堆 栈 里 往 上 移 down [n frames]- - 在 线 程 堆 栈 里 往 下 移 clear :- - 清 除 一 个 断 点 step - - 执 行 当 前 行 cont- - 从 断 点 处 继 续 执 行 catch - - 为 指 定 的 情 况 中 断 ignor - - 为 指 定 的 情 况 忽 略 list [line number]- - 打 印 源 程 序 use [Sourcefile path]- - 显 示 或 改 变 源 路 径 memeory- - 报 告 内 存 使 用 情 况 load classname- - 加 载Java类 以 便 调 试 run - - 开 始 执 行 加 载 的 类 !!- - 重 复 以 上 的 命 令 help(?)- - 列 出 所 有 的 命 令 exit( or quit)- - 离 开 调 试 器 2.1.3 Java程 序 的 执 行 java - java语 言 解 释 器 java命 令 解 释java 字 节 码 语 法: java [ options ] classname java_g [ options ] classname 描 述: java命 令 由java编 译 器javac输 出 的Java字 节 码。 classname参 数 是 要 执 行 的 类 名 称。 注 意 任 意 在 类 名 称 后 的 参 数 都 将 传 递 给 要 执 行 类 的main 函 数。 java执 行 完main函 数 后 推 出, 除 非main函 数 创 建 了 一 个 或 多 个 线 程。 如 果main函 数 创 建 了 其 它 线 程,java总 是 等 到 最 后 一 个 线 程 推 出 才 推 出。 选 项: -cs, -checksource 当 一 个 编 译 过 的 类 调 入 时, 这 个 选 项 将 比 较 字 节 码 更 改 时 间 与 源 文 件 更 改 时 间, 如 果 源 文 件 更 改 时 间 靠 后, 则 重 新 编 译 此 类 并 调 入 此 新 类。 -classpath path 定 义javac搜 索 类 的 路 径。 它 将 覆 盖 缺 省 的CLASSPATH环 境 变 量 的 设 置。 路 径 是 由 一?copy;由 逗 号 隔 开 的 路 径 名 组 成, 一 般 格 式 如 下: .; 例 如:.;C:\\java\\doc\\classes;C:\\tools\\java\\classes 表 示 解 释 器 遇 到 一 个 新 类, 它 先 在 本 文 件 中 查 找 它 的 定 义, 如 果 没 有, 则 在 本 文 件 所 处 目 录 下 其 它 文 件 中 查 找 它 的 定 义, 如 果 还 没 有, 则 继 续 搜 索C:\\java\\doc\\classes目 录 中 的 所 有 文 件, 以 此 类 推。 -mx x 设 置 最 大 内 存 分 配 池, 大 小 为x,x必 须 大 于1000bytes。 缺 省 为16兆。 -ms x 设 置 垃 圾 回 收 堆 的 大 小 为x,x必 须 大 于1000bytes。 缺 省 为1兆。 -noasyncgc 关 闭 异 步 垃 圾 回 收 功 能。 此 选 项 打 开 后, 除 非 显 式 调 用 或 程 序 内 存 溢 出, 垃 圾 内 存 都 不 回 收。 本 选 项 不 打 开 时, 垃 圾 回 收 线 程 与 其 它 线 程 异 步 同 时 执 行。 -ss x 每 个Java线 程 有 两 个 堆 栈, 一 个 是java代 码 堆 栈, 一 个 是C代 码 堆 栈。-ss选 项 将 线 程 理C代 码 用 的 堆 栈 设 置 成 最 大 为x。 -oss x 每 个Java线 程 有 两 个 堆 栈, 一 个 是java代 码 堆 栈, 一 个 是C代 码 堆 栈。-oss选 项 将 线 程 理java代 码 用 的 堆 栈 设 置 成 最 大 为x。 -v, -verbose 让java解 释 器 在 每 一 个 类 被 调 入 时, 在 标 准 输 出 打 印 相 应 信 息。 环 境 变 量 CLASSPATH 用 来 提?copy;给 系 统 搜 索 用 户 定 义 的 类 的 缺 省 路 径。 各 路 径 由 分 号 隔 开, 例 如: .;C:\\java\\doc\\classes;C:\\tools\\java\\classes 表 示 解 释 器 遇 到 一 个 新 类, 它 先 在 本 文 件 中 查 找 它 的 定 义, 如 果 没 有, 则 在 本 文 件 所 处 目 录 下 其 它 文 件 中 查 找 它 的 定 义, 如 果 还 没 有, 则 继 续 搜 索C:\\java\\doc\\classes目 录 中 的 所 有 文 件, 以 此 类 推。 2.2 JWS环 境 Java WorkShop是SUN公 司 的 一 个 新 产 品,它 是 一 个 集 成 的java语 言 开 发 环 境, 它 包 括 以 下 工 具: l Portfolio 和Project管 理 器 l 源 文 件 编 辑 器 l Build管 理 工 具 l 调 试 器 l 项 目 测 试 l ?copy;展 在 线 超 文 本 连 接 到 帮 助 文 件 这?copy;工 具 在Java WorkShop的 第 一 页 都 有 类 似Web页 面 的 超 级 连 接, 如 图: 注 意,Java WorkShop采 用 的 是 当 今 浏 览 器 的 界 面 风 格, 你 想 作 什 么, 只 需 找 到 相 应 的 超 级 连 接 就 可 以 了, 具 体 编 译 及 调 试 功 能 是 用 嵌 如 到HTML文 档 里 的Applet实 现 的, 因 此, 对 习 惯 于 用internet浏 览 方 式 的 用 户 来 说, 这 种 界 面 很 容 易 接 受。 2.2.1 Portfolio 和Project管 理 器 Protfolios是 一些java应 用 程 序 或Applet的 集 中。 它 让 你 更 好 的 管 理 更 多 的projects。 一 个project是portfolio里 的 一 个 子 集, 它 包 含 了 以 下 信 息: 1. 怎 样 编 译 本 项 目 2. 怎 样 调 试 和 浏 览 本 项 目 3. 怎 样 运 行 本 项 目 4. 怎 样 发 布 本 项 目 2.2.2 源 文 件 编 辑 器 源 文 件 编 辑 器 可 以 从build管 理 器、 调 试 器 和 源 文 件 浏 览 器 里 的 超 级 连 接 进 入。 在 这 个 模 块 里, 你 可 以 输 入 源 文 件。 2.2.3 Build管 理 工 具 本 模 块 是 项 目 的 编 译 器, 你 可 以 点build按 钮 直 接 进 入 本 模 块, 如 果 某 个 文 件 出 错, 错 误 信 息 会 提 供 一 个 超 级 连 接, 直 接 指 到 出 错 的 源 文 件 地 点。 2.2.4 Visul Java(图 形 界 面 构 造) 顾 名 思 义, 本 模 块 能 让 你 可 视 化 建 造 一个复 杂 界 面, 如 果 你 用 过Visual Basic, 你 会 发 现 它 们 很 相 似。 2.2.5 调 试 器 调 试 器 能 让 你 很 方 便 地 跟 踪 程 序 的 执 行 与 发 现 程 序 的 错 误。 本 章 小 结: Java语 言 有 两 个 开 发 环 境, 一 个 是 免 费 的JDK, 是 命 令 行 方 式 的。 还 有 一 个Java WorkShop, 是 开 发java程 序 的 集 成 环 境。 本 章 简 要 介 绍 了 它 们 的 使 用 方 法。 第 三 章 Java程 序 设 计 基 础 3.1 Java编 程 概 况 现 在 你 可 以 复 习 一 下Java语 言 的 背 景 材 料, 它 的 基 本 结 构 象C/C++, 但 任 何 用 面 向 过 程 语 言 编 写 过 程 序 的 人 都 可 以 了 解Java语 言 的 大 部 分 结 构. 3.1.1 程 序 结 构 Java语 言 的 源 程 序 代 码 由 一 个 或 多 个 编 译 单 元(compilation unit)组 成, 每 个 编 译 单 元 只 能 包 含 下 列 内 容(空 格 和 注 释 除 外): * 一 个 程 序 包 语 句(package statement ) * 入 口 语 句(import statements) * 类 的 声 明(class declarations) * 界 面 声 明(interface declarations) 每 个Java的 编 译 单 元 可 包 含 多 个 类 或 界 面, 但 是 每 个 编 译 单 元 最 多 只 能 有 一 个 类 或 者 界 面 是 公 共 的。 Java 的 源 程 序 代 码 被 编 译 ?reg; 后, 便 产 生 了Java字 节 代 码。Java的 字 节 代 码 由 一 ?copy; 不 依 赖 于 机 器 的 指 令 组 成, 这 ?copy; 指 令 能 被Java的 运 行 系 统(runtime system)有 效 地 解 释。Java的 运 行 系 统 工 作 起 来 如 同 一 台 虚 拟 机。 在 当 前 的Java实 现 中, 每 个 编 译 单 元 就 是 一 个 以.java为 后 缀 的 文 件。 每 个 编 译 单 元 有 若 干 个 类, 编 译 后, 每 个 类 生 成 一 个.class文 件。.class文 件 是Java虚 拟 机 能 够 识 别 的 代 码。 3.1.2 注 释 三 种 类 型 如 下: //注 释 一 行 /*一 行 或 多 行 注 释*/ /**文 档 注 释**/ 文 档 注 释 一 般 放 在 一 个 变 量 或 函 数 定 义 ?reg; 前,指 示 在 任 何 自 动 生 成 文 档 系 统 中 调 入。 这 ?copy; 注 释 都 是 声 明 条 目 的 描 述.。 3.1.3 标 识 符 变 量, 函 数, 类 和 对 象 的 名 称 都 是 标 识 符, 程 序 员 需 要 标 识 和 使 用 的 东 西 都 需 要 标 识 符。 在Java语 言 里,标 识 符 以 字 符 或_,$开 头,后 面 可 以 包 含 数 字, 标 识 符 是 大 小 写 有 区 别 的,没 有 长 度 限 制。 有 效 的 标 识 符 myname ict_network Hello _sys_path $bill 例 子: int a_number; char _onechar; float $bill; 关 键 词 abstract continue for new switch boolean default goto null synchronized break do if package this byte double implements private threadsafe byvalue else import protected throw case extends instanceof public transient catch false int return true char final interface short try class finally long static void const float native super while 其 它 保 留 词 以 下 单 词 被 保 留 使 用: cast future generic inner operator outer rest var 3.1.4 数 据 类 型 Java使 用 五 种 基 本 类 型:integer(整 数),floating(浮点 数),point(指 针),Boolean(布 尔 变 量),Character or String(字 符 或 字 符 串)。 integer 整 数 下 边 给 出 的 数 据 表 示 都 是 整 数 的 例 子: 4 , 15 , 089 , 0xAD00 整 数 长 度 数 据 类 型 表 示 8 bits byte 16 bits short 32 bits int 64 bits long floating 浮点 数 下 边 给 出 的 数 据 表 示 都 是浮点 数 的 例 子: 6.37 , 3.7E15 , 3e8 浮点 数 长 度 数 据 类 型 表 示 32 bits float 64 bits double Boolean 布 尔 变 量 下 边 是 布 尔 变 量 的 两 种 可 能 取 值: true false Character 字 符 下 边 给 出 的 都 是 字 符 的 例 子: a \\t (tab) \\u????(unicode) String 字 符 串 下 边 给 出 的 都 是 字 符 串 的 例 子: \"This is a string literal\" \"中 国 科 学 院 计 算 所\" 数 组 你 可 以 定 义 任 意 类 型 的 数 组. char s[]; 这 是 字 符 型 数 组; int [] array; 这 是 整 型 数 组; 你 还 可 以 定 义 数 组 的 数 组. int block[][]=new int [2][3]; 数 组 边 界 在 运 行 时 被 检 测,避 免 堆 栈 溢 出 和 内 存 崩 溃. 在Java里,数 组 实 际 上 是 一 个 对 象,数 组 有 一 个 成 员 变 量:length。 你 可 以 用 这 个 成 员 函 数 来 查 看 任 意 数 组 的 长 度. int a[][] = new int [10][3] a.length /* 10 */ a[0].length /* 3 */ 创 建 数 组 在Java里 创 建 数 组,你 可 使 用 两 种 基 本 方 法 : 一。 创 建 一 个 空 数 组: int list[]=new int[50]; 或 你 可 以 用 初 始 数 值 填 充 数 组. String names[] = { \"Chenji\",\"Yuan\",\"Chun\",\"Yang\" }; 相 当 于 下 面 功 能: String names[]; names = new String[4]; names[0]=new String(\"Chenji\"); names[1]=new String(\"Yuan\"); names[2]=new String(\"Chun\"); names[3]=new String(\"Yang\"); 在 编 译 时 你 不 能 象 下 例 那 样 创 建 静 态 数 组。 int name[50];//将 产 生 一 个 编 译 错 误 你 也 不 能 用new操 作 去 填 充 一 个 没 定 义 大 小 的 数 组。 int name[]; for (int i=0;i<9;i++) { name[i] = i; } 3.1.5 表 达 式 Java语 言 的 表 达 式 和C语 言 非 常 类 似。 运 算 符 运 算 符(operator)优 先 级 从 高 到 底 排 列 如 下: . [ ] () ++ -- ! ~ instanceof * / % + - << >> >>> < > <= >\\ == ! = & ^ && || ? : = op = , 整 数 运 算 符 在 整 数 运 算 时, 如 果 操 作 数 是long类 型, 则 运 算 结 果 是long类 型, 否 则 为int类 型, 绝 不 会 是byte,short或char型。 这 样, 如 果 变 量i被 声 明 为short或byte,i+1的 结 果 会 是int。 如 果 结 果 超 过 该 类 型 的 取 值 范 围, 则 按 该 类 型 的 最 大 值 取 模。 单 目 整 数 运 算 符 是: 运 算 符 操 作 - 单 目 非 ~ 位 补 码 ++ 加1 -- 减1 ++运 算 符 用 于 表 示 直 接 加1操 作。 增 量 操 作 也 可 以 用 加 运 算 符 和 赋 值 操 作 间 接 完 成。++ lvalue (左 值?copy; 表 示lvalue+=1, ++lvalue 也 表 示lvalue =lvalue +1 (只 要lvalue没 有 副 作 用)。--运 算 符 用 于 表 示 减1操 作。++和--运 算 符 既 可 以 作 为 前 缀 运 算 符, 也 可 以 做 为 后 缀 运 算 符。 双 目 整 数 运 算 符 是: 运 算 符 操 作** + 加 - 减 * 乘 / 除 % 取 模 & 位 与 | 位 或 ^ 位 异 或 << 左 移 >> 右 移(带 符 号) >>> 添 零 右 移 整 数 除 法 按 零 舍 入。 除 法 和 取 模 遵 守 以 下 等 式: ( a/b ) * b + ( a%b ) == a 整 数 算 术 运 算 的 异 常 是 由 于 除 零 或 按 零 取 模 造 成 的。 它 将 引 发 一 个 算 术 异 常。 下 溢 产 生 零, 上 溢 导 致 越 界。 例 如: 加1超 过 整 数 最 大 值, 取 模 后, 变 成 最 小 值。 一 个op=赋 值 运 算 符, 和 上 表 中 的 各 双 目 整 数 运 算 符 联 用, 构 成 一 个 表 达 式。 整 数 关 系 运 算 符<, >,<=,>=,==和!=产 生boolean类 型 的 数 据。 布 尔 运 算 符 布 尔(boolean)变 量 或 表 达 式 的 组 合 运 算 可 以 产 生 新 的boolean值。 单 目 运 算 符!是 布 尔 非。 双 目