1.Java 是 简 单 的
Java 与 C++ 极 为 相 似, 但 却 简 单 得 多。 高 级 编 程 语 言 的 所 有 特 性 中, 不 是 绝 对 需 要 的 都 已 删 去 了。 例 如, Java 没 有 算 符 过 载、 标 题 文 件、 预 处 理、 指 针 运 算、 结 构、 联 合、 多 维 数 组、 模 板 及 隐 式 类 型 变 换。 如 果 你 知 道 一 点 C、 C++ 或 Pascal, 你 很 快 就 会 驾 驭 Java。 这 里 是 一 个 简 单 的 Java Hello World 程 序:
public class HelloInternet {
public static void main(String argv[]) {
System.out.println(“Hello In-ternet!”)
}
}2.Java 是 面 向 对 象 的
Java 是 一 种 面 向 对 象 的 编 程 语 言。 除 了 简 单 的 类 型, 如 数 字 和 布 尔 算 子 之 外, Java 中 的 大 部 分 都 是 对 象。
正 如 任 何 面 向 对 象 的 语 言 一 样, Java 代 码 也 按 类 组 织。 每 个 类 定 义 一 组 规 定 对 象 行 为 的 方 法。 一 个 类 可 以 继 承 另 一 个 类 的 行 为。 在 类 的 根 层 次 上, 通 常 是 类 对 象。
Java 支 持 单 继 承 类 层 次 结 构。 这 就 是 说, 每 个 类 一 次 只 能 继 承 一 个 别 的 类。 有 些 语 言 允 许 多 继 承 性, 但 这 可 能 造 成 混 乱, 使 语 言 不 必 要 地 复 杂 化。 例 如, 难 以 想 像, 一 个 对 象 会 继 承 两 个 完 全 不 同 的 类 的 行 为。
Java 还 支 持 摘 要 类 的 接 口。 这 允 许 编 程 人 员 先 定 义 接 口 的 方 法, 而 不 必 急 于 马 上 确 定 方 法 的 实 现。 一 个 类 可 以 施 行 多 个 接 口, 从 而 具 有 真 正 多 继 承 性 的 许 多 优 点。 一 个 对 象 也 可 实 施 任 意 数 量 的 接 口。 Java 接 口 与 IDL 接 口 极 其 相 似。 很 容 易 建 立 IDLJ 编 译 器。 这 就 是 说, Java 可 用 于 CORBA 对 象 系 统 来 建 立 分 布 式 对 象 系 统。 鉴 于 在 许 多 计 算 机 系 统 中 都 采 用 IDL 接 口 和 CORBA 对 象 系 统, 这 种 兼 容 性 是 重 要 的。
3.Java 是 静 态 类 型 的
在 一 个 Java 程 序 中, 必 须 定 义 所 用 对 象 (数 字、 字 符、 数 组 等) 的 类 型。 这 有 助 于 编 程 人 员 很 快 发 现 问 题, 因 为 当 程 序 编 译 时 可 以 检 测 类 型 错 误。
不 过, Java 系 统 中 的 对 象 也 有 动 态 类 型。 要 求 一 个 对 象 为 动 态 类 型 往 往 是 可 能 的, 所 以 编 程 人 员 写 的 程 序 可 以 对 不 同 类 型 的 对 象 做 不 同 的 事。
4.Java 是 编 译 型 的
当 运 行 Java 程 序 时, 它 首 先 被 编 译 成 字 节 代 码。 字 节 代 码 非 常 类 似 于 机 器 指 令, 所 以 Java 程 序 非 常 高 效。 然 而, 字 节 代 码 并 不 专 对 一 种 特 定 的 机 器, 所 以 Java 程 序 无 需 重 新 编 译 便 可 在 众 多 不 同 的 计 算 机 上 执 行。
Java 源 程 序 被 编 译 成 类 文 件, 它 相 当 于 程 序 的 字 节 代 码 表 现。 在 一 个 Java 类 文 件 中, 所 有 对 方 法 及 实 例 变 量 的 参 照 均 按 名 进 行, 并 在 第 一 次 执 行 代 码 时 加 以 分 辨。 这 使 得 代 码 更 通 用, 更 不 易 受 修 改 的 影 响, 而 仍 具 高 效。
5.Java 是 体 系 结 构 中 立 的
Java 语 言 对 每 种 计 算 机 都 一 样。 比 如, 简 单 的 类 型 都 是 不 变 的: 整 数 总 是 32 位, 长 整 数 总 是 64 位。 令 人 奇 怪 的 是, 诸 如 C 及 C++ 等 时 髦 的 编 程 语 言 却 不 是 这 样。 由 于 这 些 语 言 定 义 如 此 自 由, 每 种 编 译 器 及 开 发 环 境 便 各 有 不 同 了, 这 使 程 序 的 移 植 成 为 讨 厌 的 问 题。 Java 程 序 的 移 植 却 很 容 易, 而 且 不 需 要 进 行 重 新 编 译。
6.Java 是 健 全 的
Java 程 序 不 可 能 造 成 计 算 机 崩 溃。 Java 系 统 仔 细 检 测 对 内 存 的 每 次 访 问, 确 认 它 是 合 法 的, 而 且 不 致 引 起 任 何 问 题。
不 过, 即 使 Java 程 序 也 可 能 有 错 误。 如 果 出 现 某 种 出 乎 意 料 之 事, 程 序 不 会 崩 溃, 而 把 该 例 外 抛 弃。 程 序 会 发 现 这 类 例 外, 并 加 以 处 理。
传 统 的 程 序 可 以 访 问 计 算 机 的 全 部 内 存。 程 序 可 能 (无 意 识 地) 修 改 内 存 中 的 任 何 值, 这 就 会 造 成 问 题。 Java 程 序 只 能 访 问 内 存 中 允 许 它 们 访 问 的 那 些 部 分, 所 以 Java 程 序 不 可 能 修 改 不 拟 修 改 的 值。
7.Java 是 小 巧 的
由 于 Java 的 设 计 是 要 在 小 的 计 算 机 上 运 行, 作 为 一 种 编 程 语 言 来 说 其 系 统 是 相 对 较 小 的。 它 能 有 效 地 在 4MB 以 上 RAM 的 PC 机 上 运 行。 Java 翻 译 器 只 占 用 几 百 KB。 这 种 翻 译 器 对 Java 的 平 台 无 关 性 和 可 移 植 性 是 可 靠 的。
由 于 Java 很 小, 它 对 内 存 很 小 的 计 算 机, 如 基 于 Java 的 PC 机, 以 及 电 视 机、 烤 箱、 电 话 机 及 家 用 计 算 机 等, 是 很 理 想 的。
8.Java 是 多 线 程 的
Java 程 序 可 以 执 行 一 个 以 上 的 线 程。 比 如, 它 可 以 在 一 个 线 程 中 完 成 某 一 耗 时 的 计 算, 而 其 它 线 程 与 用 户 进 行 交 互 对 话。 所 以 用 户 不 必 停 止 工 作, 等 待 Java 程 序 完 成 耗 时 的 计 算。
在 多 线 程 环 境 中 的 编 程 通 常 是 困 难 的, 因 为 许 多 东 西 可 能 同 时 出 现。 但 是, Java 提 供 了 易 于 使 用 的 同 步 特 性, 使 编 程 更 为 方 便。
Java 线 程 通 常 被 映 射 为 实 际 的 操 作 系 统 线 程, 只 要 底 层 操 作 系 统 支 持 这 种 映 射。 因 此, 用 Java 写 的 应 用 程 序 可 说 是 “MP 热”。 这 就 是 说, 如 果 它 们 在 多 处 理 器 机 器 上 运 行, 它 们 更 将 表 现 不 凡。
9.Java 是 可 收 集 无 用 的 存 储 单 元 的
用 C 及 C++ 写 软 件 的 编 程 人 员 必 须 仔 细 跟 踪 所 用 的 内 存 块。 当 一 个 块 不 再 使 用 时, 他 们 务 必 让 程 序 释 放 它, 从 而 方 可 再 用。 在 大 的 项 目 中, 这 可 能 很 困 难, 并 往 往 成 为 出 错 和 内 存 不 足 的 根 源。
在 Java 的 情 况 下, 编 程 人 员 不 必 为 内 存 管 理 操 心。 Java 系 统 有 一 个 叫 做 “无 用 单 元 收 集 器” 的 内 置 程 序, 它 扫 描 内 存, 并 自 动 释 放 那 些 不 再 使 用 的 内 存 块。
10.Java 是 快 速 的
Java 比 典 型 的 脚 本 语 言 大 为 有 效, 但 它 比 C 慢 20 倍。 这 对 大 多 数 应 用 是 可 接 受 的。
不 久 的 将 来, 代 码 生 成 器 就 可 供 利 用 了, 这 将 使 Java 程 序 几 近 于 用 C 或 C++ 编 写 的 程 序 那 么 快。
11.Java 是 安 全 的
Java 程 序 没 有 指 针, 而 且 象 这 样 的 字 节 代 码 程 序 强 在 类 型 上, 所 以 在 执 行 之 前 它 可 能 验 证 Java 程 序。 被 验 证 的 Java 程 序 得 以 保 证 不 突 破 Java 语 言 的 任 何 限 制, 而 且 可 以 安 全 地 执 行。 Java 字 节 代 码 验 证 被 Web 浏 览 器 用 来 确 保 小 程 序 不 含 病 毒。
12.Java 是 可 扩 展 的
Java 程 序 可 与 用 其 它 语 言 编 写 的 现 存 程 序 库 连 接。 由 于 Java 数 据 结 构 与 C 的 数 据 结 构 的 类 型 极 为 相 似, 这 是 相 当 方 便 的。 最 大 的 问 题 在 于, 现 有 多 线 程 程 序 库 为 数 不 多。
Java 程 序 可 以 声 明 某 些 方 法 是 内 部 的, 然 后, 把 这 些 内 部 方 法 映 射 成 软 件 库 所 定 义 的 功 能, 从 而 动 态 地 链 接 到 虚 拟 机。