JDK 1.1已经面市
JDK1.1 已 经 面 世。 我 们 已 有 了 一 定 的 时 间 来 摸 索 和 测 试 它( 虽 然 还 不 能 通 过 足 够 多 的 方 式 来 完 全 理 解 所 有 新 东 西), 因 此 现 在 是 公 布 和 交 流 我 们 所 了 解 到 的 东 西 的 时 候。
在Java Beta 1 测 试 版 发 布 的 一 个 星 期 之 内,Beta 2 版 又 发 布 了。Beta 2 版 包 括 可 视 的 错 误 修 正( 也 许 是Lew Jucker 指 出 的 安 全 类 错 误) 和Java 库 源 码。 当 你 在 阅 读 这 些 文 章 时, 你 将 发 现Java Beta 3 版 已 经 出 现。 不 幸 的 是Javasoft 只 提 供Windows 和 SPARC-Solaris 用 户 的Beta 版 本。 其 它 的 用 户 还 需 再 等 待 一 定 时 间。Javasoft 提 醒 我 们, 应 用 程 序 接 口APIs 将 会 在 最 后 发 布 前 几 分 钟 改 变, 因 此 不 用 介 意 目 前 未 作 更 改 的APIs。
正 如 你 所 期 待 的 那 样, 在 这 个 版 本 中 作 了 很 多 改 动。 内 部 类(Inner classes) 的 增 加, 导 致 了 许 多 语 法 上 的 变 更; 由 于 添 加 和 修 改 了 很 多 类, 所 以 类 库 也 发 生 了 巨 大 的 变 化(JDK 1.1 的 类 库 是JDK 1.0.2 的 两 倍 左 右)。 现 在 一 个 新 版 本 的Java 虚 拟 机JVM 取 代 了 老 的, 在Windows 机 器 上 的AWT 类 库 也 重 新 实 现, 提 供 了 更 快 速 更 平 滑 的 窗 口 操 作。 在JDK 1.1 中, 其 它 许 多 性 能 也 大 大 增 强 了。 让 我 们 逐 个 看 看 这 些 变 化。
内 部 类(Inner classes)
简 单 地 说, 内 部 类 就 是 在 另 一 个 类 的 内 部 定 义 一 个 类。 这 可 能 是 在 高 层 次 的 类 中 或 者 甚 至 在 一 块 代 码 内 部。 如 你 所 料 想 的, 对 所 定 义 的 类 访 问 仅 限 于 这 个 内 部 类 的 范 围 内。 这 使 得 定 义 一 个 只 有 在 一 个 受 限 制 范 围 内 看 到 的 类 变 得 非 常 容 易( 而 不 是 声 明 私 有 程 序 包Package)。 除 了 这 种 功 能 以 外, 它 还 能 够 创 建 运 行 时 类 的 特 殊 实 例。 例 如: 具 有 特 殊 实 现 方 法 doStuff() 的Stuffdoer() 类 的 新 实 例 可 以 如 下 创 建:
new stuffDoer() { public doStuff(){ /*...*/ } };
使 用 这 样 的 技 术, 使 得 提 供 一 种 方 法 指 针(Method Pointers) 成 为 可 能。 ─ ─ 这 就 是 首 次 引 入 内 部 类 的 主 要 原 因。 本 质 上, 程 序 员 是 用 一 种 众 所 周 知 的 相 关 方 法 创 建 一 个 特 殊 目 的 的 对 象。 这 个 对 象 就 作 为“ 方 法 指 针” 的 代 用 品( 很 聪 明, 但 是 一 个 引 入 混 乱 代 码 的 机 会)。
新 类(New classes)
许 多 新 类 来 自 于 全 新 的 程 序 包(Package)。 通 过JDBC 访 问 数 据 库 和 通 过RWI 访 问 远 程 站 点 都 是 由 新 的 程 序 包 添 加 的 特 征 的 例 子。 除 此 之 外,JDK 1.1 的 程 序 可 以 在 运 行 时 通 过Reflection 类 检 查 类 和 方 法。 认 为 最 便 利 的 新 特 征 来 自Java Archives ─ ─ 一 种 将 相 关 的 类 打 包 成 程 序 包 ( 或 其 他 东 西) 的 方 法, 并 因 此 可 以 迅 速 得 到 信 息 的 方 法。 程 序 包(Sub-Packages) 也 被 增 加 到AWT 中 来 支 持 新 的 事 件 模 型。 还 增 加 了 在 所 有 平 台 上 对 裁 剪 板(Clipboard) 的 一 致 访 问。 安 全 性 程 序 包(Security Package) 对 安 全 性 进 行 了 切 实 的 加 强。 最 后, 一 个 最 重 要 的 程 序 包, 但 不 幸 的 是 程 序 员 最 后 才 欣 赏 到 的, 那 就 是 处 理il8n 结 果text 包。
象JDBC,RMI,reflection 和 一 些 新AWT 事 件 模 型 在1996 年 夏 季 和 秋 季 就 已 公 布。 其 它 的 一 些 程 序 包 可 能 相 对 不 是 那 么 熟 悉。
Java Archives 对 于 用 户 和 程 序 员 来 说 大 量 是 透 明 的。 程 序 员 只 需 简 单 用 工 具 创 建 它 们, 把 它 们 用 参 数params 传 递 给 小 应 用 程 序applet。 如 果 需 要 它 们, 也 可 直 接 使 用 定 义 在 util.zip 包 中 的 压 缩/ 解 压 缩 方 法。
安 全 性 的 增 强 使 用 户 在 可 能 提 供 类 或 其 它 信 息 的 实 体 上 维 持 信 息( 特 别 是 密 钥) 的 数 据 库 成 为 可 能, 并 且 使 得 可 以 对 类 进 行 标 识, 允 许 从 可 信 任 的 远 程 站 点 装 载 类, 就 象 系 统 类 一 样 对 待。
这 种 用 来 支 持 国 际 化(il8n) 的 适 应 性 改 编 是 广 泛 的。 许 多 底 层 的 基 本 系 统 必 须 被 改 变( 因 为 不 是100 % 的 支 持Unicode), 增 加 了 许 多 新 的 能 力。 大 多 数 程 序 员 可 以 忽 略 这 些 变 化。 但 是 我 建 议 他 们 好 好 看 一 下 这 些 变 化。 ─ ─il8n 是 将 来 的 趋 势。 许 多 文 本 方 面 处 理 的 不 同 是 由 不 同 的 语 言 和 文 化 习 惯 引 起 的, 包 括 最 基 本 的 字 符 编 码, 字 母 表, 排 序 方 式。 变 化 之 一 就 是 为 不 同 的 语 言 产 生 了 不 同 的 文 本 输 出。 其 它 变 化 是 提 供 时 间 和 货 币 不 同 的 显 示 的 方 式。
性 能 的 提 高(Performance Enhancements)
人 们 已 经 做 了 许 多 努 力, 用 以 提 高 性 能, 虚 拟 机 的 一 部 分 已 经 用 汇 编 语 言 重 写, 没 有 用 的 类 现 在 是GC'd, AWT 在Windows 上 的 实 现 已 重 写,Java Archives 也 已 实 现,APPLE 的MAC 机 上 的 内 存 管 理 也 更 加 完 善( 在MAC 版 本 没 得 到 之 间 没 有 什 么 用)。
二 进 制 兼 容 性(Binary compatibility)
“ 你 可 在JDK 1.0.2 的 解 释 器 上 运 行JDK 1.1 版 产 生 的 类 文 件, 反 之 亦 然, 表 明APIs 本 身 并 没 有 什 么 改 变。” 你 可 以 在JDK 1.1 不 做 修 改 运 行 大 多 数 的 JDK 1.0.2 的 小 应 用 程 序(applets), 并 且 一 些JDK 1.1 产 生 的 小 应 用 程 序 也 可 在1.0.2 的 解 释 器 上 运 行。 用1.1 生 成 的 小 应 用 程 序 到 底 会 出 现 什 么 结 果 还 不 知 道。JavaSoft 说 它 们 只 是 不 工 作, 但 他 们 显 然 很 谨 慎。 这 可 能 是 一 个 安 全 的 赌 注 任 何 可 在1.0.2 上 编 译 和 运 行 的 程 序 仍 旧 可 以 JDK 1.1 上 编 译 后 运 行 于JDK 1.0.2。 当 然, 如 果 你 在 你 的 小 应 用 程 序 中 使 用 了 许 多JDK 1.1 的 新 特 牲, 可 以 确 信 它 们 在JDK 1.0.2 上 完 全 不 能 运 行。 例 如, 新 的 时 钟 演 示 程 序 使 用 了 只 有 在JDK 1.1 中 才 有 的 类, 所 以 当 然 不 会 在JDK 1.0.2 上 运 行。 但 是 内 部 类 的 实 现 对 虚 拟 机 没 有 改 变, 所 以 可 以 继 续 运 行。 因 此 当 你 想 使 你 小 应 用 程 序 在JDK 1.0.2 和JDK 1.1 中 都 能 运 行, 请 分 别 在 这 两 个 环 境 中 测 试。
转 换(Converting)
最 终, 程 序 员 必 然 转 换 到JDK1.1, 虽 然 这 里 有 帮 助, 但 程 序 员 仍 需 要 有 许 多 手 工 操 作。 最 基 本 的, 他 们 必 须 用 推 荐 的 新 形 式 置 换 所 有 那 些 旧 的 形 式 ( 在 这 文 档 中 标 明 为“ 不 赞 成” 的 部 分) 引 用。 有 时 候, 置 换 是 很 简 单 的( 如 用char 数 组, 而 不 是 用byte 数 组)。 但 有 些 时 候, 程 序 员 必 须 完 全 重 新 构 思 实 现 方 法 ( 例 如 新 的 事 件 模 型)。 除 了 努 力 研 究 文 件 外, 别 无 它 法。 现 在 编 译 器 可 以 提 供 帮 助: 如 果 在 你 的 代 码 中 遇 到 不 赞 成 的 方 法, 它 将 会 发 出 警 告。 你 仍 可 以 使 用 这 些 方 法 , 但 你 不 要 指 望 它 们 在 下 一 个 版 本 中 仍 够 可 用。
错 误(Bugs)
出 现 了 相 当 多 的 错 误, 这 并 不 奇 怪。 幸 好, 所 有 这 些 错 误 已 经 发 现 和 记 录。
Fall Internet World
在Fall Internet World 上Javasoft 发 布 了 许 多 声 明:JDK1.1 的 发 布, 工 业 界 对JDK1.1 的 反 应,“100 % 的 纯Java 初 始”, 新 的APIs 和 服 务 器 产 品。 从Apple, IBW, Netscape 等 许 多 公 司 都 产 生 了 强 烈 的 反 应。Apple 忙 于 开 发QuickTime Java 库, 集 成Opendoc 和JavaBeans。 集 成 开 发 环 境IDE 的 开 发 商Borland 和Symantec 将1.1 结 合 进 它 们 自 身 的 产 品 后 将 具 有 很 大 的 竞 争 力。 有 一 些 公 司( 如Corel 和HP) 强 调1.1 对il8n 的 支 持 对 于 她 们 的 努 力 是 多 么 的 重 要。 最 后, Netscape 公 司 已 把 对1.1 的 支 持 包 含 在 它 的 下 一 个 浏 览 器 组 件4.0 版 中。 其 早 期 副 本 已 经 可 以 得 到。 他 们 说, 虽 然 没 有 立 刻 结 合 完 全 的1.1 版, 但 他 们 将 从il8n (in8n 依 赖 于 许 多 其 它 想 要 的 部 分) 开 始, 逐 步 地 实 现 全 面 支 持。
100 % 纯Java
上 次, 我 们 报 道 了Mircosoft 引 起 了 一 定 骚 动,Mircosoft 宣 布 将 开 发 可 能 不 支 持 所 有JDK 1.1 虚 拟 机VM, 使 得 在Java 程 序 中 访 问 自 己 专 有 的 系 统 扩 展 变 得 容 易。 人 们 感 到 难 过, 因 为 他 们 觉 得 Mircosoft 试 图 带 着Java 离 开。 同 样 是 那 些 人 对Javasoft 的“100 % 纯Java 行 动 (100 %Pure Java Initiative)” 感 到 高 兴,100 % 纯Java 为 那 些 只 用Java开 发 计 算 机 程 序 的 开 发 者 提 供 了 支 持。 ( 好 象Slogn 的“ 写 一 次, 在 任 何 地 方 都 可 运 行” 的 话 在 下 一 个 十 年 将 取 代“ 网 络 就 是 计 算 机” 这 句 话)。 此 行 动 有 计 划 促 进 纯Java 的 使 用, 提 供 教 育, 测 试 和 市 场 服 务。 大 约 有 包 括IBM,Apple, Oracle 和Netscape 等100 多 家 公 司 支 持 这 种 行 动。Corel 的 Office Suite,Dimension X 的 Liquid Motion Pro, Netscape Windowing Internet Foundation Class 已 经 是 被 认 为 是 “100 % 纯Java。”
对 于 选 择 项 目 的 合 作 基 金 已 经 确 定, 细 节 将 在 四 月 份 的JavaOne 上 公 布。 一 个 名 叫 Java Developer Connection 的 软 件 已 经 开 始 应 用, 另 外 一 个,Java Select Program 安 排 在 今 年 晚 些 时 候 开 始 出 现, 为 后 两 年 准 备 的 软 件 也 正 在 准 备 之 中。
新 的 应 用 程 序 接 口(New APIs)
两 个 新 的API 已 经 被 发 布: 企 业 事 务 服 务 程 序(Transaction Services) 用 来 支 持 在 线 的 事 务 处 理。 媒 体 语 音API (Speech API) 用 于 支 持 语 音 识 别 和 合 成。 第 三 个 新API Media Framework 用 来 支 持 回 放 和 捕 捉 已 经 发 布 了。
服 务 器 产 品(Server Products)
可 以 运 行 在 任 何Java 平 台 上 的Java Web 服 务 器, 早 期 的 版 本 都 可 以 免 费 得 到; 它 支 持 在Javaone 中 引 入Servlets。 即 便 是 今 年 早 些 时 候 预 期 出 现 的 最 终 的 版 本, 也 将 是 免 费 的。 另 外 一 项 产 品, 服 务 器 工 具 箱(Server Toolkit) 也 发 布 了, 它 可 以 用 来 为 需 要 高 容 量 的 站 点 建 立 特 殊 的 服 务 器。
成 功 的 产 品(Succesful Projects)
人 们 喜 欢 周 期 性 的 查 看Java 的 动 向 ─ ─ 有 多 少 了 不 起 的 工 程 项 目 被 完 成 了, 我 们 现 在 听 说 有CSX, 一 个 大 型 货 运 公 司, 用Java 跟 踪 货 物, 还 有 美 国 邮 政 服 务 通 过Java 发 布 大 量 的 邮 件 许 可 证, 当 然Corel's Office Suite 广 泛 推 广 的Java 应 用 用( 实 际 上 是100 % 纯Java)。
许 多 人 谈 论 使 用Java 开 发 的 效 率 到 底 有 多 少 ? 一 个 有 趣 的 故 事 曲 折 来 自glen@NoSpam.com。 他 声 称 在 他 的 项 目 中 通 过 使 用Java, 他 的 效 率 提 高 的 如 此 之 多, 算 起 来Java 是 一 个 活 动 的 目 标, 他 希 望 当 他 的 项 目 达 到 一 定 阶 段 的 时 候, Java 也 达 到 一 定 的 成 熟 程 度, 使 他 的 项 目 可 以 毫 无 阻 碍 的 做 下 去, 现 在, 他 已 经 提 前 做 好 了 计 划, 只 等Java 快 快 赶 上 了( 真 是 一 个 令 人 羡 慕 的 工 作 呀 !)。
另 一 个 故 事 来 自jimf@world.std.com 他 发 现Java 中 出 现 的 异 常 处 理 工 具, 使 得 处 理 起 那 些 重 大 的 问 题 非 常 容 易, 而 且 不 会 引 起 严 重 后 果。
重 载 方 法(Overriding methods)
不 到 一 个 月 以 前, 还 没 有 人 建 议 改 变 语 法, 这 个 月 重 载(overriding) 已 经 成 了 关 键 字 了, 被 加 入 了 方 法 声 明, 并 意 味 着 一 个 方 法 重 载 了 在 基 类 中 定 义 的 方 法, 这 将 允 许 你 确 保 只 重 载 你 需 要 的 方 法, 如 果 你 使 用 了 关 键 字 而 方 法 不 存 在 或 错 误 的 使 用 方 法 将 会 产 生 警 告。
当 然 这 些 改 变 都 是 有 益 的,Java 不 能 对 语 法 无 限 改 变。